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); }
/** * if the record is associated with another record and this record * not the same as referenced record: find this record, and remove the association * * @see AssociationsTest::testCrossAssociation * * @param ActiveRecord $Record * @param ActiveRecord $ReferenceRecord * @param string $foreignKey * @return void */ protected function _removeOldAssociation(ActiveRecord $Record, ActiveRecord $ReferenceRecord, $foreignKey) { $foreignKeyValue = $Record->getRecord()[$foreignKey]; if (empty($foreignKeyValue)) { return; } $AssociatedRecord = ActiveRecordManager::findActiveRecordInPool($this->_Association->getRecord()->getModel(), $foreignKeyValue); if (!$AssociatedRecord || $ReferenceRecord === $AssociatedRecord) { return; } $assoctiation = $AssociatedRecord->{$this->_Association->getName()}; if ($assoctiation) { $assoctiation->remove($Record); } }