public function get(Object $oObject, $aParams = array())
 {
     if (isset($this->aParams['ToModuleAlias'])) {
         Core::import('Modules.' . $this->aParams['ToModuleAlias']);
     }
     $oMapper = Manager::getInstance()->getMapper($this->aParams['ToMapperAlias']);
     $aContainer = $oMapper->getContainer();
     $sTable = $aContainer['TableName'];
     $sClassName = $aContainer['Object'];
     $oQuery = new DbFetcher($sTable, 'a');
     $oQuery->addJoinTable($this->aParams['TableName'], 'b', 'LEFT JOIN', 'a.id = b.' . $this->aParams['Field']);
     $oQuery->addSelectField('a.*');
     // Условия выборки
     $oCriteria = new CriteriaGroup('AND');
     $oCriteria->addElement(new CriteriaElement($this->aParams['Field2'], '=', (int) $oObject->getId()));
     $oQuery->addCriteria($oCriteria->renderWhere());
     if (isset($this->aParams['Order'])) {
         foreach ($this->aParams['Order'] as $k => $dir) {
             $oQuery->addOrder($k, $dir);
         }
     } else {
         $oQuery->addOrder('Pos', 'ASC');
     }
     $oResult = new ObjectsCollection($oQuery);
     $aResult = $oQuery->fetchAll();
     foreach ($aResult as $itm) {
         $oResult->add(new $sClassName($this->convRealFieldToFields($itm, '', $aContainer)));
     }
     return $oResult;
 }
Example #2
0
 /**
  *
  * @param <type> $aParams
  * @return ObjectsCollection
  */
 public function find($aParams = array())
 {
     $paramsDefault = $this->scopeActive ? $this->scopeActive : $this->defaultScope();
     $aParams = ArrayHelper::merge($paramsDefault, $aParams);
     $this->scopeActive = false;
     $sClassName = $this->sModelAlias;
     $oQuery = new DbFetcher($this->tableName(), $sClassName, $this->getDbConnectionAlias());
     // Eager fetching
     if (isset($aParams['With'])) {
         if (is_string($aParams['With'])) {
             $aParams['With'] = array($aParams['With']);
         }
     }
     foreach ($this->oFields as $alias => $field) {
         if ($field->getType() != 'Object' && $field->getField()) {
             $oQuery->addSelectField($sClassName . '.' . $field->getField(), $field->getField());
         }
     }
     // Условия выборки
     if (isset($aParams['Criteria']) && is_object($aParams['Criteria'])) {
         $oQuery->addCriteria($aParams['Criteria']->renderWhere());
     }
     if (isset($aParams['Criteria']) && is_array($aParams['Criteria']) && count($aParams['Criteria']) > 0) {
         $oCriteria = new CriteriaGroup('AND');
         foreach ($aParams['Criteria'] as $k => $itm) {
             if (is_object($itm)) {
                 $oCriteria->addElement($itm);
             } else {
                 if (is_array($itm)) {
                     $oCriteria->addElement(new CriteriaElement($k, $itm['Type'], $itm['Value']));
                 } else {
                     $oCriteria->addElement(new CriteriaElement($k, '=', $itm));
                 }
             }
         }
         $oQuery->addCriteria($this->parseFindCriteria($oCriteria->renderWhere()));
     }
     if (isset($aParams['Criteria']) && is_string($aParams['Criteria'])) {
         $oQuery->addCriteria($this->parseFindCriteria($aParams['Criteria']));
     }
     // Лимит выборки
     if (isset($aParams['Limit']) && $aParams['Limit'] > 0) {
         $oQuery->setLimit($aParams['Limit']);
     }
     // Смещение выборки
     if (isset($aParams['Offset'])) {
         $oQuery->setOffset($aParams['Offset']);
     }
     // Сортировка
     if (isset($aParams['Order']) && is_array($aParams['Order']) && count($aParams['Order']) > 0) {
         foreach ($aParams['Order'] as $k => $itm) {
             $oQuery->addOrder($this->parseFindCriteria($k), $itm);
             //$oQuery->addOrder($k, $itm);
         }
     }
     if (isset($aParams['Group']) && is_array($aParams['Group']) && count($aParams['Group']) > 0) {
         foreach ($aParams['Group'] as $k => $itm) {
             $oQuery->addGroup($itm);
         }
     }
     if (isset($aParams['With']) && is_array($aParams['With']) && count($aParams['With'])) {
         foreach ($aParams['With'] as $k => $rel) {
             $oRelation = false;
             $aLocalParams = array();
             if (is_array($rel)) {
                 $oRelation = $this->oRelations->get($k);
                 $aLocalParams = $rel;
             } else {
                 if (is_string($rel)) {
                     $oRelation = $this->oRelations->get($rel);
                 }
             }
             if ($oRelation) {
                 $oQuery = $oRelation->eagerFetching($oQuery, $this, $sClassName, $aParams, $aLocalParams);
             }
         }
     }
     $oResult = new ObjectsCollection($oQuery);
     $aResult = $oQuery->fetchAll();
     $classNameWithNamespaces = '\\ruxon\\modules\\' . $this->sModuleAlias . '\\models\\' . $sClassName;
     foreach ($aResult as $itm) {
         $oItem = class_exists($sClassName) ? new $sClassName($this->convRealFieldToFields($itm)) : new $classNameWithNamespaces($this->convRealFieldToFields($itm));
         if (isset($aParams['With']) && is_array($aParams['With']) && count($aParams['With'])) {
             $this->parseJoinFields($oItem, $itm, $aParams['With'], $sClassName . '_');
         }
         $oResult->add($oItem);
     }
     return $oResult;
 }