trait HasRelationships (View source)

Properties

protected array $relations

The loaded relationships for the model.

protected array $touches

The relationships that should be touched on save.

static string[] $manyMethods

The many to many relationship methods.

static protected array $relationResolvers

The relation resolver callbacks.

Methods

mixed
relationResolver(string $class, string $key)

Get the dynamic relation resolver if defined or inherited, or return null.

static void
resolveRelationUsing(string $name, Closure $callback)

Define a dynamic relation resolver.

hasOne(string $related, string|null $foreignKey = null, string|null $localKey = null)

Define a one-to-one relationship.

newHasOne(Builder $query, Model $parent, string $foreignKey, string $localKey)

Instantiate a new HasOne relationship.

hasOneThrough(string $related, string $through, string|null $firstKey = null, string|null $secondKey = null, string|null $localKey = null, string|null $secondLocalKey = null)

Define a has-one-through relationship.

newHasOneThrough(Builder $query, Model $farParent, Model $throughParent, string $firstKey, string $secondKey, string $localKey, string $secondLocalKey)

Instantiate a new HasOneThrough relationship.

morphOne(string $related, string $name, string|null $type = null, string|null $id = null, string|null $localKey = null)

Define a polymorphic one-to-one relationship.

newMorphOne(Builder $query, Model $parent, string $type, string $id, string $localKey)

Instantiate a new MorphOne relationship.

belongsTo(string $related, string|null $foreignKey = null, string|null $ownerKey = null, string|null $relation = null)

Define an inverse one-to-one or many relationship.

newBelongsTo(Builder $query, Model $child, string $foreignKey, string $ownerKey, string $relation)

Instantiate a new BelongsTo relationship.

morphTo(string|null $name = null, string|null $type = null, string|null $id = null, string|null $ownerKey = null)

Define a polymorphic, inverse one-to-one or many relationship.

morphEagerTo(string $name, string $type, string $id, string $ownerKey)

Define a polymorphic, inverse one-to-one or many relationship.

morphInstanceTo(string $target, string $name, string $type, string $id, string $ownerKey)

Define a polymorphic, inverse one-to-one or many relationship.

newMorphTo(Builder $query, Model $parent, string $foreignKey, string $ownerKey, string $type, string $relation)

Instantiate a new MorphTo relationship.

static string
getActualClassNameForMorph(string $class)

Retrieve the actual class name for a given morph class.

string
guessBelongsToRelation()

Guess the "belongs to" relationship name.

through(string|HasMany|HasOne $relationship)

Create a pending has-many-through or has-one-through relationship.

hasMany(string $related, string|null $foreignKey = null, string|null $localKey = null)

Define a one-to-many relationship.

newHasMany(Builder $query, Model $parent, string $foreignKey, string $localKey)

Instantiate a new HasMany relationship.

hasManyThrough(string $related, string $through, string|null $firstKey = null, string|null $secondKey = null, string|null $localKey = null, string|null $secondLocalKey = null)

Define a has-many-through relationship.

newHasManyThrough(Builder $query, Model $farParent, Model $throughParent, string $firstKey, string $secondKey, string $localKey, string $secondLocalKey)

Instantiate a new HasManyThrough relationship.

morphMany(string $related, string $name, string|null $type = null, string|null $id = null, string|null $localKey = null)

Define a polymorphic one-to-many relationship.

newMorphMany(Builder $query, Model $parent, string $type, string $id, string $localKey)

Instantiate a new MorphMany relationship.

belongsToMany(string $related, string|Model>|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null)

Define a many-to-many relationship.

newBelongsToMany(Builder $query, Model $parent, string|Model> $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string|null $relationName = null)

Instantiate a new BelongsToMany relationship.

morphToMany(string $related, string $name, string|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null, bool $inverse = false)

Define a polymorphic many-to-many relationship.

newMorphToMany(Builder $query, Model $parent, string $name, string $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string|null $relationName = null, bool $inverse = false)

Instantiate a new MorphToMany relationship.

morphedByMany(string $related, string $name, string|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null)

Define a polymorphic, inverse many-to-many relationship.

string|null
guessBelongsToManyRelation()

Get the relationship name of the belongsToMany relationship.

string
joiningTable(string $related, Model|null $instance = null)

Get the joining table name for a many-to-many relation.

string
joiningTableSegment()

Get this model's half of the intermediate table name for belongsToMany relationships.

bool
touches(string $relation)

Determine if the model touches a given relation.

void
touchOwners()

Touch the owning relations of the model.

array
getMorphs(string $name, string $type, string $id)

Get the polymorphic relationship columns.

string
getMorphClass()

Get the class name for polymorphic relations.

mixed
newRelatedInstance(string $class)

Create a new model instance for a related model.

mixed
newRelatedThroughInstance(string $class)

Create a new model instance for a related "through" model.

array
getRelations()

Get all the loaded relations for the instance.

mixed
getRelation(string $relation)

Get a specified relationship.

bool
relationLoaded(string $key)

Determine if the given relation is loaded.

$this
setRelation(string $relation, mixed $value)

Set the given relationship on the model.

$this
unsetRelation(string $relation)

Unset a loaded relationship.

$this
setRelations(array $relations)

Set the entire relations array on the model.

$this
withoutRelations()

Duplicate the instance and unset all the loaded relations.

$this
unsetRelations()

Unset all the loaded relations for the instance.

array
getTouchedRelations()

Get the relationships that are touched on save.

$this
setTouchedRelations(array $touches)

Set the relationships that are touched on save.

Details

mixed relationResolver(string $class, string $key)

Get the dynamic relation resolver if defined or inherited, or return null.

Parameters

string $class
string $key

Return Value

mixed

static void resolveRelationUsing(string $name, Closure $callback)

Define a dynamic relation resolver.

Parameters

string $name
Closure $callback

Return Value

void

HasOne hasOne(string $related, string|null $foreignKey = null, string|null $localKey = null)

Define a one-to-one relationship.

Parameters

string $related
string|null $foreignKey
string|null $localKey

Return Value

HasOne

protected HasOne newHasOne(Builder $query, Model $parent, string $foreignKey, string $localKey)

Instantiate a new HasOne relationship.

Parameters

Builder $query
Model $parent
string $foreignKey
string $localKey

Return Value

HasOne

HasOneThrough hasOneThrough(string $related, string $through, string|null $firstKey = null, string|null $secondKey = null, string|null $localKey = null, string|null $secondLocalKey = null)

Define a has-one-through relationship.

Parameters

string $related
string $through
string|null $firstKey
string|null $secondKey
string|null $localKey
string|null $secondLocalKey

Return Value

HasOneThrough

protected HasOneThrough newHasOneThrough(Builder $query, Model $farParent, Model $throughParent, string $firstKey, string $secondKey, string $localKey, string $secondLocalKey)

Instantiate a new HasOneThrough relationship.

Parameters

Builder $query
Model $farParent
Model $throughParent
string $firstKey
string $secondKey
string $localKey
string $secondLocalKey

Return Value

HasOneThrough

MorphOne morphOne(string $related, string $name, string|null $type = null, string|null $id = null, string|null $localKey = null)

Define a polymorphic one-to-one relationship.

Parameters

string $related
string $name
string|null $type
string|null $id
string|null $localKey

Return Value

MorphOne

protected MorphOne newMorphOne(Builder $query, Model $parent, string $type, string $id, string $localKey)

Instantiate a new MorphOne relationship.

Parameters

Builder $query
Model $parent
string $type
string $id
string $localKey

Return Value

MorphOne

BelongsTo belongsTo(string $related, string|null $foreignKey = null, string|null $ownerKey = null, string|null $relation = null)

Define an inverse one-to-one or many relationship.

Parameters

string $related
string|null $foreignKey
string|null $ownerKey
string|null $relation

Return Value

BelongsTo

protected BelongsTo newBelongsTo(Builder $query, Model $child, string $foreignKey, string $ownerKey, string $relation)

Instantiate a new BelongsTo relationship.

Parameters

Builder $query
Model $child
string $foreignKey
string $ownerKey
string $relation

Return Value

BelongsTo

MorphTo morphTo(string|null $name = null, string|null $type = null, string|null $id = null, string|null $ownerKey = null)

Define a polymorphic, inverse one-to-one or many relationship.

Parameters

string|null $name
string|null $type
string|null $id
string|null $ownerKey

Return Value

MorphTo

protected MorphTo morphEagerTo(string $name, string $type, string $id, string $ownerKey)

Define a polymorphic, inverse one-to-one or many relationship.

Parameters

string $name
string $type
string $id
string $ownerKey

Return Value

MorphTo

protected MorphTo morphInstanceTo(string $target, string $name, string $type, string $id, string $ownerKey)

Define a polymorphic, inverse one-to-one or many relationship.

Parameters

string $target
string $name
string $type
string $id
string $ownerKey

Return Value

MorphTo

protected MorphTo newMorphTo(Builder $query, Model $parent, string $foreignKey, string $ownerKey, string $type, string $relation)

Instantiate a new MorphTo relationship.

Parameters

Builder $query
Model $parent
string $foreignKey
string $ownerKey
string $type
string $relation

Return Value

MorphTo

static string getActualClassNameForMorph(string $class)

Retrieve the actual class name for a given morph class.

Parameters

string $class

Return Value

string

protected string guessBelongsToRelation()

Guess the "belongs to" relationship name.

Return Value

string

PendingHasThroughRelationship through(string|HasMany|HasOne $relationship)

Create a pending has-many-through or has-one-through relationship.

Parameters

string|HasMany|HasOne $relationship

Return Value

PendingHasThroughRelationship

HasMany hasMany(string $related, string|null $foreignKey = null, string|null $localKey = null)

Define a one-to-many relationship.

Parameters

string $related
string|null $foreignKey
string|null $localKey

Return Value

HasMany

protected HasMany newHasMany(Builder $query, Model $parent, string $foreignKey, string $localKey)

Instantiate a new HasMany relationship.

Parameters

Builder $query
Model $parent
string $foreignKey
string $localKey

Return Value

HasMany

HasManyThrough hasManyThrough(string $related, string $through, string|null $firstKey = null, string|null $secondKey = null, string|null $localKey = null, string|null $secondLocalKey = null)

Define a has-many-through relationship.

Parameters

string $related
string $through
string|null $firstKey
string|null $secondKey
string|null $localKey
string|null $secondLocalKey

Return Value

HasManyThrough

protected HasManyThrough newHasManyThrough(Builder $query, Model $farParent, Model $throughParent, string $firstKey, string $secondKey, string $localKey, string $secondLocalKey)

Instantiate a new HasManyThrough relationship.

Parameters

Builder $query
Model $farParent
Model $throughParent
string $firstKey
string $secondKey
string $localKey
string $secondLocalKey

Return Value

HasManyThrough

MorphMany morphMany(string $related, string $name, string|null $type = null, string|null $id = null, string|null $localKey = null)

Define a polymorphic one-to-many relationship.

Parameters

string $related
string $name
string|null $type
string|null $id
string|null $localKey

Return Value

MorphMany

protected MorphMany newMorphMany(Builder $query, Model $parent, string $type, string $id, string $localKey)

Instantiate a new MorphMany relationship.

Parameters

Builder $query
Model $parent
string $type
string $id
string $localKey

Return Value

MorphMany

BelongsToMany belongsToMany(string $related, string|Model>|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null)

Define a many-to-many relationship.

Parameters

string $related
string|Model>|null $table
string|null $foreignPivotKey
string|null $relatedPivotKey
string|null $parentKey
string|null $relatedKey
string|null $relation

Return Value

BelongsToMany

protected BelongsToMany newBelongsToMany(Builder $query, Model $parent, string|Model> $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string|null $relationName = null)

Instantiate a new BelongsToMany relationship.

Parameters

Builder $query
Model $parent
string|Model> $table
string $foreignPivotKey
string $relatedPivotKey
string $parentKey
string $relatedKey
string|null $relationName

Return Value

BelongsToMany

MorphToMany morphToMany(string $related, string $name, string|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null, bool $inverse = false)

Define a polymorphic many-to-many relationship.

Parameters

string $related
string $name
string|null $table
string|null $foreignPivotKey
string|null $relatedPivotKey
string|null $parentKey
string|null $relatedKey
string|null $relation
bool $inverse

Return Value

MorphToMany

protected MorphToMany newMorphToMany(Builder $query, Model $parent, string $name, string $table, string $foreignPivotKey, string $relatedPivotKey, string $parentKey, string $relatedKey, string|null $relationName = null, bool $inverse = false)

Instantiate a new MorphToMany relationship.

Parameters

Builder $query
Model $parent
string $name
string $table
string $foreignPivotKey
string $relatedPivotKey
string $parentKey
string $relatedKey
string|null $relationName
bool $inverse

Return Value

MorphToMany

MorphToMany morphedByMany(string $related, string $name, string|null $table = null, string|null $foreignPivotKey = null, string|null $relatedPivotKey = null, string|null $parentKey = null, string|null $relatedKey = null, string|null $relation = null)

Define a polymorphic, inverse many-to-many relationship.

Parameters

string $related
string $name
string|null $table
string|null $foreignPivotKey
string|null $relatedPivotKey
string|null $parentKey
string|null $relatedKey
string|null $relation

Return Value

MorphToMany

protected string|null guessBelongsToManyRelation()

Get the relationship name of the belongsToMany relationship.

Return Value

string|null

string joiningTable(string $related, Model|null $instance = null)

Get the joining table name for a many-to-many relation.

Parameters

string $related
Model|null $instance

Return Value

string

string joiningTableSegment()

Get this model's half of the intermediate table name for belongsToMany relationships.

Return Value

string

bool touches(string $relation)

Determine if the model touches a given relation.

Parameters

string $relation

Return Value

bool

void touchOwners()

Touch the owning relations of the model.

Return Value

void

protected array getMorphs(string $name, string $type, string $id)

Get the polymorphic relationship columns.

Parameters

string $name
string $type
string $id

Return Value

array

string getMorphClass()

Get the class name for polymorphic relations.

Return Value

string

protected mixed newRelatedInstance(string $class)

Create a new model instance for a related model.

Parameters

string $class

Return Value

mixed

protected mixed newRelatedThroughInstance(string $class)

Create a new model instance for a related "through" model.

Parameters

string $class

Return Value

mixed

array getRelations()

Get all the loaded relations for the instance.

Return Value

array

mixed getRelation(string $relation)

Get a specified relationship.

Parameters

string $relation

Return Value

mixed

bool relationLoaded(string $key)

Determine if the given relation is loaded.

Parameters

string $key

Return Value

bool

$this setRelation(string $relation, mixed $value)

Set the given relationship on the model.

Parameters

string $relation
mixed $value

Return Value

$this

$this unsetRelation(string $relation)

Unset a loaded relationship.

Parameters

string $relation

Return Value

$this

$this setRelations(array $relations)

Set the entire relations array on the model.

Parameters

array $relations

Return Value

$this

$this withoutRelations()

Duplicate the instance and unset all the loaded relations.

Return Value

$this

$this unsetRelations()

Unset all the loaded relations for the instance.

Return Value

$this

array getTouchedRelations()

Get the relationships that are touched on save.

Return Value

array

$this setTouchedRelations(array $touches)

Set the relationships that are touched on save.

Parameters

array $touches

Return Value

$this