public function associatedRecords(ActiveRecord $Record)
 {
     $referenceRecord = $Record->getRecord();
     $foreignKey = $this->_Association->getDefinition('foreignKey');
     if (is_null($referenceRecord[$foreignKey])) {
         return array(null);
     }
     // The record has a foreign key, but has not the associated Active Record.
     // First try to find the Active Record in the pool, if not query it.
     $relatedRecord = ActiveRecordManager::findActiveRecordInPool($this->_Association->getModel(), $referenceRecord[$foreignKey]);
     if ($relatedRecord === false) {
         $relatedRecord = $this->_Association->getModel()->find('first', array('conditions' => array($this->_Association->getPrimaryKey() => $referenceRecord[$foreignKey]), 'recursive' => -1, 'activeRecord' => false));
         if ($relatedRecord) {
             $relatedRecord = ActiveRecordManager::getActiveRecord($this->_Association->getModel(), $relatedRecord);
         } else {
             $relatedRecord = null;
         }
     }
     return array($relatedRecord);
 }
 public function afterFind(Model $Model, $results, $primary = false)
 {
     $records = $results;
     if ($this->runtime[$Model->alias]['activeRecord']) {
         if ($Model->findQueryType == 'first') {
             // The afterFind callback is called before that the find method refines the result to 1 row.
             if (count($results) > 0) {
                 $records = array(ActiveRecordManager::getActiveRecord($Model, $results[0]));
             } else {
                 $records = array();
             }
         } elseif ($Model->findQueryType == 'all') {
             $records = array();
             foreach ($results as $result) {
                 $records[] = ActiveRecordManager::getActiveRecord($Model, $result);
             }
         }
     }
     return $records;
 }
 public function associatedRecords(ActiveRecord $Record)
 {
     $record = $Record->getRecord();
     $Model = $Record->getModel();
     $RelatedRecord = false;
     // If the association has no condition, try first to find it in the pool
     if ($this->_Association->getDefinition('conditions')) {
         $RelatedRecord = ActiveRecordManager::findActiveRecordInPoolWithSecondaryKey($this->_Association->getModel(), $this->_Association->getDefinition('foreignKey'), $record[$Model->primaryKey]);
     }
     if ($RelatedRecord !== false) {
         return array($RelatedRecord);
     }
     if (!$Model->Behaviors->attached('Containable')) {
         $Model->Behaviors->load('Containable');
     }
     $result = $Model->find('first', array('conditions' => array($Model->alias . '.' . $Model->primaryKey => $record[$Model->primaryKey]), 'contain' => array($this->_Association->getName()), 'activeRecord' => false));
     if (!empty($result[$this->_Association->getName()][$this->_Association->getPrimaryKey()])) {
         $RelatedRecord = ActiveRecordManager::getActiveRecord($this->_Association->getModel(), $result[$this->_Association->getName()]);
     } else {
         $RelatedRecord = null;
     }
     return array($RelatedRecord);
 }
 public function refresh($records)
 {
     if ($this->_initialized) {
         if ($this->isBelongsTo() || $this->isHasOne()) {
             if (count($this->_associated) === 1) {
                 $this->_associated[0]->refresh($records);
             } else {
                 $this->_associated = array(ActiveRecordManager::getActiveRecord($this->_Model, $records));
             }
         } else {
             $oldRecords = array();
             foreach ($this->_associated as $Record) {
                 $oldRecords[$Record->{$this->getPrimaryKey()}] = $Record;
             }
             $result = array();
             foreach ($records as $record) {
                 if (array_key_exists($record[$this->getPrimaryKey()], $oldRecords)) {
                     $result[] = $Record->refresh($record);
                 } else {
                     $result[] = ActiveRecordManager::getActiveRecord($this->_Model, $record);
                 }
             }
             $this->_associated = $result;
         }
     } else {
         $this->_initializeWithRecord($records);
     }
     $this->_changed = false;
 }
 public function associatedRecords(ActiveRecord $Record)
 {
     $referenceRecord = $Record->getRecord();
     $referenceModel = $Record->getModel();
     $relatedRecords = array();
     if (isset($referenceRecord[$referenceModel->primaryKey])) {
         if (!$referenceModel->Behaviors->attached('Containable')) {
             $referenceModel->Behaviors->load('Containable');
         }
         // We can never be sure that all records are stored in the pool. So we must query them.
         $result = $referenceModel->find('first', array('conditions' => array($referenceModel->alias . '.' . $referenceModel->primaryKey => $referenceRecord[$referenceModel->primaryKey]), 'contain' => array($this->_Association->getName()), 'activeRecord' => false));
         if (!$result) {
             return $relatedRecords;
         }
         foreach ($result[$this->_Association->getName()] as $relatedRecord) {
             $relatedRecords[] = ActiveRecordManager::getActiveRecord($this->_Association->getModel(), $relatedRecord);
         }
     }
     return $relatedRecords;
 }