added support for overriding many-to-many table names.

This commit is contained in:
Taylor Otwell 2011-06-13 22:09:34 -05:00
parent ae7114163a
commit 9cee469371
2 changed files with 17 additions and 7 deletions

View File

@ -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);
}
/**

View File

@ -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';