From 05b2e287701c293d25cb48f49240f559dc7c4ed2 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Sun, 12 Jun 2011 22:19:46 -0500 Subject: [PATCH] added ability to specify foreign key for has_one and has_many relationships. --- system/db/eloquent.php | 10 ++++++---- system/db/eloquent/relate.php | 15 +++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/system/db/eloquent.php b/system/db/eloquent.php index 6713acbb..4033f300 100644 --- a/system/db/eloquent.php +++ b/system/db/eloquent.php @@ -124,22 +124,24 @@ private function _first() * Retrieve the query for a 1:1 relationship. * * @param string $model + * @param string $foreign_key * @return mixed */ - public function has_one($model) + public function has_one($model, $foreign_key = null) { - return Eloquent\Relate::has_one($model, $this); + return Eloquent\Relate::has_one($model, $foreign_key, $this); } /** * Retrieve the query for a 1:* relationship. * * @param string $model + * @param string $foreign_key * @return mixed */ - public function has_many($model) + public function has_many($model, $foreign_key = null) { - return Eloquent\Relate::has_many($model, $this); + return Eloquent\Relate::has_many($model, $foreign_key, $this); } /** diff --git a/system/db/eloquent/relate.php b/system/db/eloquent/relate.php index 18973003..8edf0341 100644 --- a/system/db/eloquent/relate.php +++ b/system/db/eloquent/relate.php @@ -6,38 +6,41 @@ class Relate { * Retrieve the query for a 1:1 relationship. * * @param string $model + * @param string $foreign_key * @param object $eloquent * @return mixed */ - public static function has_one($model, $eloquent) + public static function has_one($model, $foreign_key, $eloquent) { $eloquent->relating = __FUNCTION__; - return static::has_one_or_many($model, $eloquent); + return static::has_one_or_many($model, $foreign_key, $eloquent); } /** * Retrieve the query for a 1:* relationship. * * @param string $model + * @param string $foreign_key * @param object $eloquent * @return mixed */ - public static function has_many($model, $eloquent) + public static function has_many($model, $foreign_key, $eloquent) { $eloquent->relating = __FUNCTION__; - return static::has_one_or_many($model, $eloquent); + return static::has_one_or_many($model, $foreign_key, $eloquent); } /** * Retrieve the query for a 1:1 or 1:* relationship. * * @param string $model + * @param string $foreign_key * @param object $eloquent * @return mixed */ - private static function has_one_or_many($model, $eloquent) + private static function has_one_or_many($model, $foreign_key, $eloquent) { - $eloquent->relating_key = \System\Str::lower(get_class($eloquent)).'_id'; + $eloquent->relating_key = (is_null($foreign_key)) ? \System\Str::lower(get_class($eloquent)).'_id' : $foreign_key; return Factory::make($model)->where($eloquent->relating_key, '=', $eloquent->id); }