diff --git a/system/db/eloquent.php b/system/db/eloquent.php index 91510041..2284061c 100644 --- a/system/db/eloquent.php +++ b/system/db/eloquent.php @@ -164,11 +164,12 @@ abstract class Eloquent { * Retrieve the query for a *:* relationship. * * @param string $model + * @param string $table * @return mixed */ - public function has_many_and_belongs_to($model) + public function has_many_and_belongs_to($model, $table = null) { - return Eloquent\Relate::has_many_and_belongs_to($model, $this); + return Eloquent\Relate::has_many_and_belongs_to($model, $table, $this); } /** diff --git a/system/db/eloquent/relate.php b/system/db/eloquent/relate.php index 8edf0341..858ef2a5 100644 --- a/system/db/eloquent/relate.php +++ b/system/db/eloquent/relate.php @@ -64,18 +64,27 @@ class Relate { * Retrieve the query for a *:* relationship. * * @param string $model + * @param string $table * @param object $eloquent * @return mixed */ - public static function has_many_and_belongs_to($model, $eloquent) + public static function has_many_and_belongs_to($model, $table, $eloquent) { // ----------------------------------------------------- - // Get the models involved in the relationship. + // Figure out the intermediate table name. // ----------------------------------------------------- - $models = array(\System\Str::lower($model), \System\Str::lower(get_class($eloquent))); - sort($models); + if (is_null($table)) + { + $models = array(\System\Str::lower($model), \System\Str::lower(get_class($eloquent))); + sort($models); + + $eloquent->relating_table = implode('_', $models); + } + else + { + $eloquent->relating_table = $table; + } - $eloquent->relating_table = implode('_', $models); $eloquent->relating = __FUNCTION__; $eloquent->relating_key = $eloquent->relating_table.'.'.\System\Str::lower(get_class($eloquent)).'_id';