Adding auto detection of intermediate table names.
Signed-off-by: Taylor Otwell <taylorotwell@gmail.com>
This commit is contained in:
parent
c3d95122e4
commit
dc92dd264d
|
@ -264,7 +264,7 @@ public function belongs_to($model, $foreign = null)
|
||||||
* @param string $other
|
* @param string $other
|
||||||
* @return Relationship
|
* @return Relationship
|
||||||
*/
|
*/
|
||||||
public function has_many_and_belongs_to($model, $table, $foreign = null, $other = null)
|
public function has_many_and_belongs_to($model, $table = null, $foreign = null, $other = null)
|
||||||
{
|
{
|
||||||
return new Has_Many_And_Belongs_To($this, $model, $table, $foreign, $other);
|
return new Has_Many_And_Belongs_To($this, $model, $table, $foreign, $other);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,27 @@ public function __construct($model, $associated, $table, $foreign, $other)
|
||||||
{
|
{
|
||||||
$this->other = $other;
|
$this->other = $other;
|
||||||
|
|
||||||
$this->joining = $table;
|
$this->joining = $table ?: $this->joining($model, $associated);
|
||||||
|
|
||||||
parent::__construct($model, $associated, $foreign);
|
parent::__construct($model, $associated, $foreign);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the joining table name for the relationship.
|
||||||
|
*
|
||||||
|
* By default, the name is the models sorted and concatenated with an underscore.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function joining($model, $associated)
|
||||||
|
{
|
||||||
|
$models = array(class_basename($model), class_basename($associated));
|
||||||
|
|
||||||
|
sort($models);
|
||||||
|
|
||||||
|
return strtolower($models[0].'_'.$models[1]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the properly hydrated results for the relationship.
|
* Get the properly hydrated results for the relationship.
|
||||||
*
|
*
|
||||||
|
|
|
@ -376,6 +376,21 @@ function root_namespace($class, $separator = '\\')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the "class basename" of a class or object.
|
||||||
|
*
|
||||||
|
* The basename is considered the name of the class minus all namespaces.
|
||||||
|
*
|
||||||
|
* @param object|string $class
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function class_basename($class)
|
||||||
|
{
|
||||||
|
if (is_object($class)) $class = get_class($class);
|
||||||
|
|
||||||
|
return basename($class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the value of the given item.
|
* Return the value of the given item.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue