/** * setReference * sets a reference pointer * * @return void */ public function setReference(Doctrine_Record $record, Doctrine_Relation $relation) { $this->reference = $record; $this->relation = $relation; if ($relation instanceof Doctrine_Relation_ForeignKey || $relation instanceof Doctrine_Relation_LocalKey) { $this->referenceField = $relation->getForeign(); $value = $record->get($relation->getLocal()); foreach ($this->data as $record) { if ($value !== null) { $record->set($this->referenceField, $value, false); } else { $record->set($this->referenceField, $this->reference, false); } } } elseif ($relation instanceof Doctrine_Relation_Association) { } }
protected function buildAssociativeRelationSql(Doctrine_Relation $relation, $assocAlias, $foreignAlias, $localAlias) { $table = $relation->getTable(); $queryPart = ' ON '; if ($relation->isEqual()) { $queryPart .= '('; } $localIdentifier = $table->getColumnName($table->getIdentifier()); $queryPart .= $this->_conn->quoteIdentifier($foreignAlias . '.' . $localIdentifier) . ' = ' . $this->_conn->quoteIdentifier($assocAlias . '.' . $relation->getForeign()); if ($relation->isEqual()) { $queryPart .= ' OR ' . $this->_conn->quoteIdentifier($foreignAlias . '.' . $localIdentifier) . ' = ' . $this->_conn->quoteIdentifier($assocAlias . '.' . $relation->getLocal()) . ') AND ' . $this->_conn->quoteIdentifier($foreignAlias . '.' . $localIdentifier) . ' != ' . $this->_conn->quoteIdentifier($localAlias . '.' . $localIdentifier); } return $queryPart; }
protected function renderRelatedRecord(Doctrine_Record $record, Doctrine_Relation $relation) { $value = $record->get($relation->getLocal()); $cacheKey = md5(implode('|', array($this->versionModel, $relation->getClass(), $value))); if (isset($this->relatedRecordCache[$cacheKey])) { return $this->relatedRecordCache[$cacheKey]; } try { if ('DmMedia' === $relation->getClass()) { $relatedRecord = $relation->getTable()->findOneByIdWithFolder($value); if ($relatedRecord && $relatedRecord->isImage()) { $return = $this->helper->media($relatedRecord)->size($this->getOption('media_width'), $this->getOption('media_height'))->render(); } else { $return = $relatedRecord; } } else { $return = $relation->getTable()->findOneById($value); } } catch (Exception $e) { $return = get_class($relation->getClass()) . ' #' . $value; } return $this->relatedRecordCache[$cacheKey] = $return; }