diff --git a/system/db/eloquent.php b/system/db/eloquent.php index 6713acbb4..4033f3002 100644 --- a/system/db/eloquent.php +++ b/system/db/eloquent.php @@ -124,22 +124,24 @@ abstract class Eloquent { * 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 18973003c..8edf03419 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); }