From 17cc50375b6b3ba19dfaba3918d80dabdbfd94fb Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Wed, 20 Jul 2011 06:57:34 -0700 Subject: [PATCH] Added support for self-referential many-to-many relationships in Eloquent. --- system/db/eloquent.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/system/db/eloquent.php b/system/db/eloquent.php index 625d7559..6398cfbe 100644 --- a/system/db/eloquent.php +++ b/system/db/eloquent.php @@ -264,9 +264,11 @@ abstract class Eloquent { * * @param string $model * @param string $table + * @param string $foreign_key + * @param string $associated_key * @return mixed */ - public function has_and_belongs_to_many($model, $table = null) + public function has_and_belongs_to_many($model, $table = null, $foreign_key = null, $associated_key = null) { $this->relating = __FUNCTION__; @@ -283,11 +285,13 @@ abstract class Eloquent { $this->relating_table = $table; } - $this->relating_key = strtolower(get_class($this)).'_id'; + $this->relating_key = (is_null($foreign_key)) ? strtolower(get_class($this)).'_id' : $foreign_key; + + $associated_key = (is_null($associated_key)) ? strtolower($model).'_id' : $associated_key; return static::make($model) ->select(array(static::table($model).'.*')) - ->join($this->relating_table, static::table($model).'.id', '=', $this->relating_table.'.'.strtolower($model).'_id') + ->join($this->relating_table, static::table($model).'.id', '=', $this->relating_table.'.'.$associated_key) ->where($this->relating_table.'.'.$this->relating_key, '=', $this->id); }