Commit 453d4154 authored by Taylor Otwell's avatar Taylor Otwell

Added "pivot" method to has_many_and_belongs_to.

parent 1929cadc
...@@ -136,7 +136,7 @@ class Query { ...@@ -136,7 +136,7 @@ class Query {
// any pivot columns that are on the model. // any pivot columns that are on the model.
if ($this instanceof Relationships\Has_Many_And_Belongs_To) if ($this instanceof Relationships\Has_Many_And_Belongs_To)
{ {
$this->pivot($models); $this->hydrate_pivot($models);
} }
return $models; return $models;
......
...@@ -108,9 +108,11 @@ class Has_Many_And_Belongs_To extends Relationship { ...@@ -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 // 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 // using the new ID that was just inserted into the related table, allowing
// the developer to not worry about maintaining the join table. // 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; return $model instanceof Model and $result;
...@@ -279,7 +281,7 @@ class Has_Many_And_Belongs_To extends Relationship { ...@@ -279,7 +281,7 @@ class Has_Many_And_Belongs_To extends Relationship {
* @param array $results * @param array $results
* @return void * @return void
*/ */
protected function pivot(&$results) protected function hydrate_pivot(&$results)
{ {
foreach ($results as &$result) foreach ($results as &$result)
{ {
...@@ -288,17 +290,19 @@ class Has_Many_And_Belongs_To extends Relationship { ...@@ -288,17 +290,19 @@ class Has_Many_And_Belongs_To extends Relationship {
// the pivot table that may need to be accessed by the developer. // the pivot table that may need to be accessed by the developer.
$pivot = new Pivot($this->joining); $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 // 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 // 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. // 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 // Once we have completed hydrating the pivot model instance, we'll set
...@@ -330,6 +334,16 @@ class Has_Many_And_Belongs_To extends Relationship { ...@@ -330,6 +334,16 @@ class Has_Many_And_Belongs_To extends Relationship {
return $this; return $this;
} }
/**
* 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. * Get the other or associated key for the relationship.
* *
......
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