Commit 453d4154 by Taylor Otwell

Added "pivot" method to has_many_and_belongs_to.

parent 1929cadc
......@@ -136,7 +136,7 @@ class Query {
// any pivot columns that are on the model.
if ($this instanceof Relationships\Has_Many_And_Belongs_To)
{
$this->pivot($models);
$this->hydrate_pivot($models);
}
return $models;
......
......@@ -108,9 +108,11 @@ class Has_Many_And_Belongs_To extends Relationship {
// If the insert was successful, we'll insert a record into the joining table
// using the new ID that was just inserted into the related table, allowing
// the developer to not worry about maintaining the join table.
if ($model instanceof Model and is_numeric($id = $model->get_key()))
if ($model instanceof Model)
{
$result = $this->insert_joining(array_merge($this->join_record($id), $joining));
$joining = array_merge($this->join_record($id), $joining);
$result = $this->insert_joining($joining);
}
return $model instanceof Model and $result;
......@@ -279,7 +281,7 @@ class Has_Many_And_Belongs_To extends Relationship {
* @param array $results
* @return void
*/
protected function pivot(&$results)
protected function hydrate_pivot(&$results)
{
foreach ($results as &$result)
{
......@@ -288,17 +290,19 @@ class Has_Many_And_Belongs_To extends Relationship {
// the pivot table that may need to be accessed by the developer.
$pivot = new Pivot($this->joining);
$attributes = array_filter($result->attributes, function($attribute)
{
return starts_with($attribute, 'pivot_');
});
// If the attribute key starts with "pivot_", we know this is a column on
// the pivot table, so we will move it to the Pivot model and purge it
// from the model since it actually belongs to the pivot.
foreach ($result->attributes as $key => $value)
foreach ($attributes as $key => $value)
{
if (starts_with($key, 'pivot_'))
{
$pivot->{substr($key, 6)} = $value;
$pivot->{substr($key, 6)} = $value;
$result->purge($key);
}
$result->purge($key);
}
// Once we have completed hydrating the pivot model instance, we'll set
......@@ -331,6 +335,16 @@ class Has_Many_And_Belongs_To extends Relationship {
}
/**
* Get a model instance of the pivot table for the relationship.
*
* @return Pivot
*/
public function pivot()
{
return new Pivot($this->joining);
}
/**
* Get the other or associated key for the relationship.
*
* @return string
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment