diff --git a/lib/Doctrine/Record.php b/lib/Doctrine/Record.php index 1131f5ec5..be6115c1c 100644 --- a/lib/Doctrine/Record.php +++ b/lib/Doctrine/Record.php @@ -883,7 +883,7 @@ abstract class Doctrine_Record extends Doctrine_Record_Abstract implements Count throw new Doctrine_Record_Exception("Couldn't call Doctrine::set(), second argument should be an instance of Doctrine_Record or Doctrine_Null when setting one-to-one references."); } if ($rel instanceof Doctrine_Relation_LocalKey) { - $this->set($rel->getLocal(), $value, false); + $this->set($rel->getLocal(), $value->rawGet($rel->getForeign()), false); } else { $value->set($rel->getForeign(), $this, false); } diff --git a/lib/Doctrine/Relation/LocalKey.php b/lib/Doctrine/Relation/LocalKey.php index b3117568e..33452f2a1 100644 --- a/lib/Doctrine/Relation/LocalKey.php +++ b/lib/Doctrine/Relation/LocalKey.php @@ -43,12 +43,18 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation */ public function fetchRelatedFor(Doctrine_Record $record) { - $id = $record->get($this->definition['local']); + $id = $record->get($this->definition['local']); if (empty($id) || ! $this->definition['table']->getAttribute(Doctrine::ATTR_LOAD_REFERENCES)) { $related = $this->getTable()->create(); } else { - $related = $this->getTable()->find($id); + $dql = 'FROM ' . $this->getTable()->getComponentName() + . ' WHERE ' . $this->getCondition(); + + $related = $this->getTable() + ->getConnection() + ->query($dql, array($id)) + ->getFirst(); if ( ! $related) { $related = $this->getTable()->create(); @@ -58,5 +64,19 @@ class Doctrine_Relation_LocalKey extends Doctrine_Relation $record->set($this->definition['local'], $related, false); return $related; + } + + /** + * getCondition + * + * @param string $alias + */ + public function getCondition($alias = null) + { + if ( ! $alias) { + $alias = $this->getTable()->getComponentName(); + } + return $alias . '.' . $this->definition['foreign'] . ' = ?'; } + }