diff --git a/src/Illuminate/Database/Eloquent/Relations/HasOne.php b/src/Illuminate/Database/Eloquent/Relations/HasOne.php index d9a5e5a10e39..24fc28ab2c59 100755 --- a/src/Illuminate/Database/Eloquent/Relations/HasOne.php +++ b/src/Illuminate/Database/Eloquent/Relations/HasOne.php @@ -2,6 +2,7 @@ namespace Illuminate\Database\Eloquent\Relations; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; class HasOne extends HasOneOrMany @@ -32,16 +33,7 @@ public function withDefault() */ public function getResults() { - if ($result = $this->query->first()) { - return $result; - } - - if ($this->withDefault) { - return $this->related->newInstance() - ->setAttribute( - $this->getPlainForeignKey(), $this->getParentKey() - ); - } + return $this->query->first() ?: $this->getDefaultFor($this->parent); } /** @@ -54,7 +46,7 @@ public function getResults() public function initRelation(array $models, $relation) { foreach ($models as $model) { - $model->setRelation($relation, null); + $model->setRelation($relation, $this->getDefaultFor($model)); } return $models; @@ -63,7 +55,7 @@ public function initRelation(array $models, $relation) /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -72,4 +64,19 @@ public function match(array $models, Collection $results, $relation) { return $this->matchOne($models, $results, $relation); } + + /** + * Get the default value for this relation. + * + * @param \Illuminate\Database\Eloquent\Model $model + * @return \Illuminate\Database\Eloquent\Model|null + */ + protected function getDefaultFor(Model $model) + { + if ($this->withDefault) { + return $this->related->newInstance()->setAttribute( + $this->getPlainForeignKey(), $model->getAttribute($this->localKey) + ); + } + } }