/** * @param QueryObject $query * @param int $offset * @param int $limit * @return array */ public function getAll(QueryObject $query, $offset = 0, $limit = 10) { $filter = (string) $query; $current_member = Member::currentUser(); $do = null; if ($current_member && !$current_member->isMarketPlaceSuperAdmin()) { //if current user is super admin get all //if not , get just related companies $companies = $current_member->getManagedMarketPlaceCompaniesByType($this->getMarketPlaceTypeGroup()); if (count($companies)) { $company_filter = ' CompanyID IN ( '; foreach ($companies as $company) { $company_filter .= $company->getIdentifier() . ','; } $company_filter = trim($company_filter, ','); $company_filter .= ' ) '; if (!empty($filter)) { $company_filter = ' AND ' . $company_filter; } $filter = $filter . $company_filter; } } $inner_joins = $query->getAlias(QueryAlias::INNER); $left_joins = $query->getAlias(QueryAlias::LEFT); //build query for data object $class = $this->entity_class; $do = $class::get()->where($filter)->sort($query->getOrder())->limit($limit, $offset); foreach ($inner_joins as $table => $on) { $do = $do->innerJoin($table, $on); } foreach ($left_joins as $table => $on) { $do = $do->leftJoin($table, $on); } if (is_null($do)) { return array(array(), 0); } $res = $do->toArray(); foreach ($res as $entity) { UnitOfWork::getInstance()->scheduleForUpdate($entity); } return array($res, (int) $do->count()); }
public function getCollection(IEntity $owner, $child_class, QueryObject $query, $type) { $owner_key = spl_object_hash($owner); $query_key = md5(sprintf("%s_%s_%s", $query->__toString(), implode(',', $query->getAlias()), implode(',', $query->getOrder()))); $collection_key = md5(sprintf('%s_%s_%s', $owner_key, $child_class, $query_key)); $collections = array(); if ($type == '1-to-many') { if (array_key_exists($owner_key, $this->loaded_collections_one_2_many_identity_map)) { $collections = $this->loaded_collections_one_2_many_identity_map[$owner_key]; } } else { if (array_key_exists($owner_key, $this->loaded_collections_many_2_many_identity_map)) { $collections = $this->loaded_collections_many_2_many_identity_map[$owner_key]; } } if (array_key_exists($collection_key, $collections)) { return $collections[$collection_key]; } return false; }
public function getBy(QueryObject $query) { $class = $this->entity_class; $query->setBaseEntity(new $class()); $filter = (string) $query; $do = $class::get()->where($filter); $joins = $query->getAlias(); foreach ($joins as $table => $clause) { $do = $do->innerJoin($table, $clause); } if (count($query->getOrder())) { $do = $do->sort($query->getOrder()); } if (is_null($do)) { return false; } $entity = $do->first(); $this->markEntity($entity); return $entity; }
public function getBy(QueryObject $query) { $class = $this->entity_class; $query->setBaseEntity(new $class()); $filter = (string) $query; $do = $class::get()->where($filter); foreach ($query->getAlias(QueryAlias::INNER) as $spec) { $do = $do->innerJoin($spec->getTable(), $spec->getCondition(), $spec->getAlias()); } foreach ($query->getAlias(QueryAlias::LEFT) as $spec) { $do = $do->leftJoin($spec->getTable(), $spec->getCondition(), $spec->getAlias()); } if (count($query->getOrder())) { $do = $do->sort($query->getOrder()); } if (is_null($do)) { return false; } $entity = $do->first(); $this->markEntity($entity); return $entity; }
public function getBy(QueryObject $query) { $class = $this->entity_class; $query->setBaseEntity(new $class()); $filter = (string) $query; $do = $class::get()->where($filter); $joins = $query->getAlias(); foreach ($joins as $table => $clause) { $do = $do->innerJoin($table, $clause); } if (count($query->getOrder())) { $do = $do->sort($query->getOrder()); } if (is_null($do)) { return false; } $entity = $do->first(); if (!is_null($entity) && $entity instanceof IEntity) { UnitOfWork::getInstance()->setToCache($entity); UnitOfWork::getInstance()->scheduleForUpdate($entity); } return $entity; }