BelongsToManyThrough extends BelongsToMany Uses Unique
A BelongsToMany relationship that queries through an additional intermediate model.
Tags
Table of Contents
$intermediateRelation | The relation through which we are joining. | Relation |
---|---|---|
$tertiaryRelated | The related tertiary model instance. | Model |
$tertiaryRelationName | The name to use for the tertiary relation (e.g. 'roles_via', etc). | string |
$tertiaryKey | The foreign key to the related tertiary model instance. | string |
$tertiaryCallback | A callback to apply to the tertiary query. | callable|null |
$limit | The limit to apply on the number of related models retrieved. | int|null |
$offset | The offset to apply on the related models retrieved. | int|null |
__construct() | Create a new belongs to many relationship instance. | mixed |
getParentKeyName() | Use the intermediate relationship to determine the "parent" pivot key name. | string |
getExistenceCompareKey() | Get the key for comparing against the parent key in "has" query. | string |
withVia() | Add a "via" query to load the intermediate models through which the child models are related. | self |
addEagerConstraints() | Set the constraints for an eager load of the relation. | mixed |
addWhereConstraints() | Set the where clause for the relation query. | self |
match() | Match the eagerly loaded results to their parents. | array |
unsetTertiaryPivots() | Unset tertiary pivots on a collection or array of models. | mixed |
performJoin() | Set the join clause for the relation query. | self |
aliasedPivotColumns() | Get the pivot columns for the relation. | array |
skip() | Alias to set the "offset" value of the query. | self |
offset() | Set the "offset" value of the query. | self |
take() | Alias to set the "limit" value of the query. | self |
limit() | Set the "limit" value of the query. | self |
withLimit() | Set the limit on the number of intermediate models to load. | $this |
withOffset() | Set the offset when loading the intermediate models. | $this |
withTertiary() | Add a query to load the nested tertiary models for this relationship. | self |
count() | Return the count of child models for this relationship. | int |
getRelationExistenceCountQuery() | Add the constraints for a relationship count query. | Builder |
match() | Match the eagerly loaded results to their parents. | array |
get() | Execute the query as a "select" statement, getting all requested models and matching up any tertiary models. | Collection |
getPaginatedQuery() | If we are applying either a limit or offset, we'll first determine a limited/offset list of model ids to select from in the final query. | Builder |
getEager() | Get the full join results for this query, overriding the default getEager() method. | Collection |
getModels() | Get the hydrated models and eager load their relations, optionally condensing the set of models before performing the eager loads. | Collection |
condenseModels() | Condense the raw join query results into a set of unique models. | array |
buildDictionary() | Build dictionary of related models keyed by the top-level "parent" id. | array |
buildTertiaryDictionary() | Build dictionary of tertiary models keyed by the corresponding related model keys. | array |
transferPivotsToTertiary() | Transfer the pivot to the tertiary model. | mixed |
getTertiaryModels() | Get the tertiary models for the relationship. | Collection |
matchTertiaryModels() | Match a collection of child models into a collection of parent models using a dictionary. | mixed |
unsetTertiaryPivots() | Unset tertiary pivots on a collection or array of models. | mixed |
Properties
$intermediateRelation
The relation through which we are joining.
protected
Relation
$intermediateRelation
$tertiaryRelated
The related tertiary model instance.
protected
Model
$tertiaryRelated
= null
$tertiaryRelationName
The name to use for the tertiary relation (e.g. 'roles_via', etc).
protected
string
$tertiaryRelationName
= null
$tertiaryKey
The foreign key to the related tertiary model instance.
protected
string
$tertiaryKey
$tertiaryCallback
A callback to apply to the tertiary query.
protected
callable|null
$tertiaryCallback
= null
$limit
The limit to apply on the number of related models retrieved.
protected
int|null
$limit
= null
$offset
The offset to apply on the related models retrieved.
protected
int|null
$offset
= null
Methods
__construct()
Create a new belongs to many relationship instance.
public
__construct(
$query :
Builder
, $parent :
Model
, $intermediateRelation :
Relation
, $table :
string
, $foreignPivotKey :
string
, $relatedPivotKey :
string
, $parentKey :
string
, $relatedKey :
string
[, $relationName :
string
= null ]
)
: mixed
Parameters
- $query : Builder
- $parent : Model
- $intermediateRelation : Relation
- $table : string
- $foreignPivotKey : string
- $relatedPivotKey : string
- $parentKey : string
- $relatedKey : string
- $relationName : string = null
Return values
mixedgetParentKeyName()
Use the intermediate relationship to determine the "parent" pivot key name.
public
getParentKeyName(
)
: string
This is a crazy roundabout way to get the name of the intermediate relation's foreign key. It would be better if BelongsToMany had a simple accessor for its foreign key.
Return values
stringgetExistenceCompareKey()
Get the key for comparing against the parent key in "has" query.
public
getExistenceCompareKey(
)
: string
Tags
Return values
stringwithVia()
Add a "via" query to load the intermediate models through which the child models are related.
public
withVia(
[ $viaRelationName :
string
= null ]
[, $viaCallback :
callable
= null ]
)
: self
Parameters
- $viaRelationName : string = null
- $viaCallback : callable = null
Return values
selfaddEagerConstraints()
Set the constraints for an eager load of the relation.
public
addEagerConstraints(
$models :
array
)
: mixed
Parameters
- $models : array
Return values
mixedaddWhereConstraints()
Set the where clause for the relation query.
protected
addWhereConstraints(
)
: self
Return values
selfmatch()
Match the eagerly loaded results to their parents.
public
match(
$models :
array
, $results :
Collection
, $relation :
string
)
: array
Parameters
- $models : array
- $results : Collection
- $relation : string
Return values
arrayunsetTertiaryPivots()
Unset tertiary pivots on a collection or array of models.
protected
unsetTertiaryPivots(
$models :
Collection
)
: mixed
Parameters
- $models : Collection
Return values
mixedperformJoin()
Set the join clause for the relation query.
protected
performJoin(
[ $query :
Builder|null
= null ]
)
: self
Parameters
- $query : Builder|null = null
Return values
selfaliasedPivotColumns()
Get the pivot columns for the relation.
protected
aliasedPivotColumns(
)
: array
"pivot_" is prefixed to each column for easy removal later.
Return values
arrayskip()
Alias to set the "offset" value of the query.
public
skip(
$value :
int
)
: self
Parameters
- $value : int
Return values
selfoffset()
Set the "offset" value of the query.
public
offset(
$value :
int
)
: self
Parameters
- $value : int
Tags
Return values
selftake()
Alias to set the "limit" value of the query.
public
take(
$value :
int
)
: self
Parameters
- $value : int
Return values
selflimit()
Set the "limit" value of the query.
public
limit(
$value :
int
)
: self
Parameters
- $value : int
Tags
Return values
selfwithLimit()
Set the limit on the number of intermediate models to load.
public
withLimit(
$value :
int
)
: $this
Parameters
- $value : int
Tags
Return values
$thiswithOffset()
Set the offset when loading the intermediate models.
public
withOffset(
$value :
int
)
: $this
Parameters
- $value : int
Tags
Return values
$thiswithTertiary()
Add a query to load the nested tertiary models for this relationship.
public
withTertiary(
$tertiaryRelated :
string
[, $tertiaryRelationName :
string
= null ]
[, $tertiaryKey :
string
= null ]
[, $tertiaryCallback :
callable
= null ]
)
: self
Parameters
- $tertiaryRelated : string
- $tertiaryRelationName : string = null
- $tertiaryKey : string = null
- $tertiaryCallback : callable = null
Return values
selfcount()
Return the count of child models for this relationship.
public
count(
)
: int
Tags
Return values
intgetRelationExistenceCountQuery()
Add the constraints for a relationship count query.
public
getRelationExistenceCountQuery(
$query :
Builder
, $parentQuery :
Builder
)
: Builder
Parameters
- $query : Builder
- $parentQuery : Builder
Tags
Return values
Buildermatch()
Match the eagerly loaded results to their parents.
public
match(
$models :
array
, $results :
Collection
, $relation :
string
)
: array
Parameters
- $models : array
- $results : Collection
- $relation : string
Return values
arrayget()
Execute the query as a "select" statement, getting all requested models and matching up any tertiary models.
public
get(
[ $columns :
array
= ['*'] ]
)
: Collection
Parameters
- $columns : array = ['*']
Return values
CollectiongetPaginatedQuery()
If we are applying either a limit or offset, we'll first determine a limited/offset list of model ids to select from in the final query.
public
getPaginatedQuery(
$query :
Builder
[, $limit :
int
= null ]
[, $offset :
int
= null ]
)
: Builder
Parameters
- $query : Builder
- $limit : int = null
- $offset : int = null
Return values
BuildergetEager()
Get the full join results for this query, overriding the default getEager() method.
public
getEager(
)
: Collection
The default getEager() method would normally just call get() on this relationship.
This is not what we want here though, because our get() method removes records before
match
has a chance to build out the substructures.
Return values
CollectiongetModels()
Get the hydrated models and eager load their relations, optionally condensing the set of models before performing the eager loads.
public
getModels(
[ $columns :
array
= ['*'] ]
[, $condenseModels :
bool
= true ]
)
: Collection
Parameters
- $columns : array = ['*']
- $condenseModels : bool = true
Return values
CollectioncondenseModels()
Condense the raw join query results into a set of unique models.
protected
condenseModels(
$models :
array
)
: array
Before doing this, we may optionally find any tertiary models that should be set as sub-relations on these models.
Parameters
- $models : array
Return values
arraybuildDictionary()
Build dictionary of related models keyed by the top-level "parent" id.
protected
buildDictionary(
$results :
Collection
[, $parentKey :
string
= null ]
)
: array
If there is a tertiary query set as well, then also build a two-level dictionary that maps parent ids to arrays of related ids, which in turn map to arrays of tertiary models corresponding to each relationship.
Parameters
- $results : Collection
- $parentKey : string = null
Return values
arraybuildTertiaryDictionary()
Build dictionary of tertiary models keyed by the corresponding related model keys.
protected
buildTertiaryDictionary(
$models :
array
)
: array
Parameters
- $models : array
Return values
arraytransferPivotsToTertiary()
Transfer the pivot to the tertiary model.
protected
transferPivotsToTertiary(
$model :
Model
, $tertiaryModel :
Model
)
: mixed
Parameters
- $model : Model
- $tertiaryModel : Model
Return values
mixedgetTertiaryModels()
Get the tertiary models for the relationship.
protected
getTertiaryModels(
$models :
array
)
: Collection
Parameters
- $models : array
Return values
CollectionmatchTertiaryModels()
Match a collection of child models into a collection of parent models using a dictionary.
protected
matchTertiaryModels(
$dictionary :
array
, $results :
Collection
)
: mixed
Parameters
- $dictionary : array
- $results : Collection
Return values
mixedunsetTertiaryPivots()
Unset tertiary pivots on a collection or array of models.
protected
unsetTertiaryPivots(
$models :
Collection
)
: mixed
Parameters
- $models : Collection