name: Relation
class_comment: null
dependencies:
- name: Closure
  type: class
  source: Closure
- name: BuilderContract
  type: class
  source: Illuminate\Contracts\Database\Eloquent\Builder
- name: Builder
  type: class
  source: Illuminate\Database\Eloquent\Builder
- name: Collection
  type: class
  source: Illuminate\Database\Eloquent\Collection
- name: Model
  type: class
  source: Illuminate\Database\Eloquent\Model
- name: ModelNotFoundException
  type: class
  source: Illuminate\Database\Eloquent\ModelNotFoundException
- name: MultipleRecordsFoundException
  type: class
  source: Illuminate\Database\MultipleRecordsFoundException
- name: Expression
  type: class
  source: Illuminate\Database\Query\Expression
- name: ForwardsCalls
  type: class
  source: Illuminate\Support\Traits\ForwardsCalls
- name: Macroable
  type: class
  source: Illuminate\Support\Traits\Macroable
properties:
- name: query
  visibility: protected
  comment: "# * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n\
    # * @template TDeclaringModel of \\Illuminate\\Database\\Eloquent\\Model\n# *\
    \ @template TResult\n# *\n# * @mixin \\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>\n\
    # */\n# abstract class Relation implements BuilderContract\n# {\n# use ForwardsCalls,\
    \ Macroable {\n# Macroable::__call as macroCall;\n# }\n# \n# /**\n# * The Eloquent\
    \ query builder instance.\n# *\n# * @var \\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>"
- name: parent
  visibility: protected
  comment: '# * The parent model instance.

    # *

    # * @var TDeclaringModel'
- name: related
  visibility: protected
  comment: '# * The related model instance.

    # *

    # * @var TRelatedModel'
- name: eagerKeysWereEmpty
  visibility: protected
  comment: '# * Indicates whether the eagerly loaded relation should implicitly return
    an empty collection.

    # *

    # * @var bool'
- name: constraints
  visibility: protected
  comment: '# * Indicates if the relation is adding constraints.

    # *

    # * @var bool'
- name: morphMap
  visibility: public
  comment: '# * An array to map class names to their morph names in the database.

    # *

    # * @var array'
- name: requireMorphMap
  visibility: protected
  comment: '# * Prevents morph relationships without a morph map.

    # *

    # * @var bool'
- name: selfJoinCount
  visibility: protected
  comment: '# * The count of self joins.

    # *

    # * @var int'
methods:
- name: __construct
  visibility: public
  parameters:
  - name: query
  - name: parent
  comment: "# * @template TRelatedModel of \\Illuminate\\Database\\Eloquent\\Model\n\
    # * @template TDeclaringModel of \\Illuminate\\Database\\Eloquent\\Model\n# *\
    \ @template TResult\n# *\n# * @mixin \\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>\n\
    # */\n# abstract class Relation implements BuilderContract\n# {\n# use ForwardsCalls,\
    \ Macroable {\n# Macroable::__call as macroCall;\n# }\n# \n# /**\n# * The Eloquent\
    \ query builder instance.\n# *\n# * @var \\Illuminate\\Database\\Eloquent\\Builder<TRelatedModel>\n\
    # */\n# protected $query;\n# \n# /**\n# * The parent model instance.\n# *\n# *\
    \ @var TDeclaringModel\n# */\n# protected $parent;\n# \n# /**\n# * The related\
    \ model instance.\n# *\n# * @var TRelatedModel\n# */\n# protected $related;\n\
    # \n# /**\n# * Indicates whether the eagerly loaded relation should implicitly\
    \ return an empty collection.\n# *\n# * @var bool\n# */\n# protected $eagerKeysWereEmpty\
    \ = false;\n# \n# /**\n# * Indicates if the relation is adding constraints.\n\
    # *\n# * @var bool\n# */\n# protected static $constraints = true;\n# \n# /**\n\
    # * An array to map class names to their morph names in the database.\n# *\n#\
    \ * @var array\n# */\n# public static $morphMap = [];\n# \n# /**\n# * Prevents\
    \ morph relationships without a morph map.\n# *\n# * @var bool\n# */\n# protected\
    \ static $requireMorphMap = false;\n# \n# /**\n# * The count of self joins.\n\
    # *\n# * @var int\n# */\n# protected static $selfJoinCount = 0;\n# \n# /**\n#\
    \ * Create a new relation instance.\n# *\n# * @param  \\Illuminate\\Database\\\
    Eloquent\\Builder<TRelatedModel>  $query\n# * @param  TDeclaringModel  $parent\n\
    # * @return void"
- name: noConstraints
  visibility: public
  parameters:
  - name: callback
  comment: '# * Run a callback with constraints disabled on the relation.

    # *

    # * @param  \Closure  $callback

    # * @return mixed'
- name: getEager
  visibility: public
  parameters: []
  comment: "# * Set the base constraints on the relation query.\n# *\n# * @return\
    \ void\n# */\n# abstract public function addConstraints();\n# \n# /**\n# * Set\
    \ the constraints for an eager load of the relation.\n# *\n# * @param  array<int,\
    \ TDeclaringModel>  $models\n# * @return void\n# */\n# abstract public function\
    \ addEagerConstraints(array $models);\n# \n# /**\n# * Initialize the relation\
    \ on a set of models.\n# *\n# * @param  array<int, TDeclaringModel>  $models\n\
    # * @param  string  $relation\n# * @return array<int, TDeclaringModel>\n# */\n\
    # abstract public function initRelation(array $models, $relation);\n# \n# /**\n\
    # * Match the eagerly loaded results to their parents.\n# *\n# * @param  array<int,\
    \ TDeclaringModel>  $models\n# * @param  \\Illuminate\\Database\\Eloquent\\Collection<int,\
    \ TRelatedModel>  $results\n# * @param  string  $relation\n# * @return array<int,\
    \ TDeclaringModel>\n# */\n# abstract public function match(array $models, Collection\
    \ $results, $relation);\n# \n# /**\n# * Get the results of the relationship.\n\
    # *\n# * @return TResult\n# */\n# abstract public function getResults();\n# \n\
    # /**\n# * Get the relationship for eager loading.\n# *\n# * @return \\Illuminate\\\
    Database\\Eloquent\\Collection<int, TRelatedModel>"
- name: sole
  visibility: public
  parameters:
  - name: columns
    default: '[''*'']'
  comment: '# * Execute the query and get the first result if it''s the sole matching
    record.

    # *

    # * @param  array|string  $columns

    # * @return TRelatedModel

    # *

    # * @throws \Illuminate\Database\Eloquent\ModelNotFoundException<TRelatedModel>

    # * @throws \Illuminate\Database\MultipleRecordsFoundException'
- name: get
  visibility: public
  parameters:
  - name: columns
    default: '[''*'']'
  comment: '# * Execute the query as a "select" statement.

    # *

    # * @param  array  $columns

    # * @return \Illuminate\Database\Eloquent\Collection<int, TRelatedModel>'
- name: touch
  visibility: public
  parameters: []
  comment: '# * Touch all of the related models for the relationship.

    # *

    # * @return void'
- name: rawUpdate
  visibility: public
  parameters:
  - name: attributes
    default: '[]'
  comment: '# * Run a raw update against the base query.

    # *

    # * @param  array  $attributes

    # * @return int'
- name: getRelationExistenceCountQuery
  visibility: public
  parameters:
  - name: query
  - name: parentQuery
  comment: '# * Add the constraints for a relationship count query.

    # *

    # * @param  \Illuminate\Database\Eloquent\Builder<TRelatedModel>  $query

    # * @param  \Illuminate\Database\Eloquent\Builder<TDeclaringModel>  $parentQuery

    # * @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>'
- name: getRelationExistenceQuery
  visibility: public
  parameters:
  - name: query
  - name: parentQuery
  - name: columns
    default: '[''*'']'
  comment: '# * Add the constraints for an internal relationship existence query.

    # *

    # * Essentially, these queries compare on column names like whereColumn.

    # *

    # * @param  \Illuminate\Database\Eloquent\Builder<TRelatedModel>  $query

    # * @param  \Illuminate\Database\Eloquent\Builder<TDeclaringModel>  $parentQuery

    # * @param  array|mixed  $columns

    # * @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>'
- name: getRelationCountHash
  visibility: public
  parameters:
  - name: incrementJoinCount
    default: 'true'
  comment: '# * Get a relationship join table hash.

    # *

    # * @param  bool  $incrementJoinCount

    # * @return string'
- name: getKeys
  visibility: protected
  parameters:
  - name: models
  - name: key
    default: 'null'
  comment: '# * Get all of the primary keys for an array of models.

    # *

    # * @param  array<int, TDeclaringModel>  $models

    # * @param  string|null  $key

    # * @return array<int, int|string>'
- name: getRelationQuery
  visibility: protected
  parameters: []
  comment: '# * Get the query builder that will contain the relationship constraints.

    # *

    # * @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>'
- name: getQuery
  visibility: public
  parameters: []
  comment: '# * Get the underlying query for the relation.

    # *

    # * @return \Illuminate\Database\Eloquent\Builder<TRelatedModel>'
- name: getBaseQuery
  visibility: public
  parameters: []
  comment: '# * Get the base query builder driving the Eloquent builder.

    # *

    # * @return \Illuminate\Database\Query\Builder'
- name: toBase
  visibility: public
  parameters: []
  comment: '# * Get a base query builder instance.

    # *

    # * @return \Illuminate\Database\Query\Builder'
- name: getParent
  visibility: public
  parameters: []
  comment: '# * Get the parent model of the relation.

    # *

    # * @return TDeclaringModel'
- name: getQualifiedParentKeyName
  visibility: public
  parameters: []
  comment: '# * Get the fully qualified parent key name.

    # *

    # * @return string'
- name: getRelated
  visibility: public
  parameters: []
  comment: '# * Get the related model of the relation.

    # *

    # * @return TRelatedModel'
- name: createdAt
  visibility: public
  parameters: []
  comment: '# * Get the name of the "created at" column.

    # *

    # * @return string'
- name: updatedAt
  visibility: public
  parameters: []
  comment: '# * Get the name of the "updated at" column.

    # *

    # * @return string'
- name: relatedUpdatedAt
  visibility: public
  parameters: []
  comment: '# * Get the name of the related model''s "updated at" column.

    # *

    # * @return string'
- name: whereInEager
  visibility: protected
  parameters:
  - name: whereIn
  - name: key
  - name: modelKeys
  - name: query
    default: 'null'
  comment: '# * Add a whereIn eager constraint for the given set of model keys to
    be loaded.

    # *

    # * @param  string  $whereIn

    # * @param  string  $key

    # * @param  array  $modelKeys

    # * @param  \Illuminate\Database\Eloquent\Builder<TRelatedModel>|null  $query

    # * @return void'
- name: whereInMethod
  visibility: protected
  parameters:
  - name: model
  - name: key
  comment: '# * Get the name of the "where in" method for eager loading.

    # *

    # * @param  \Illuminate\Database\Eloquent\Model  $model

    # * @param  string  $key

    # * @return string'
- name: requireMorphMap
  visibility: public
  parameters:
  - name: requireMorphMap
    default: 'true'
  comment: '# * Prevent polymorphic relationships from being used without model mappings.

    # *

    # * @param  bool  $requireMorphMap

    # * @return void'
- name: requiresMorphMap
  visibility: public
  parameters: []
  comment: '# * Determine if polymorphic relationships require explicit model mapping.

    # *

    # * @return bool'
- name: enforceMorphMap
  visibility: public
  parameters:
  - name: map
  - name: merge
    default: 'true'
  comment: '# * Define the morph map for polymorphic relations and require all morphed
    models to be explicitly mapped.

    # *

    # * @param  array  $map

    # * @param  bool  $merge

    # * @return array'
- name: morphMap
  visibility: public
  parameters:
  - name: map
    default: 'null'
  - name: merge
    default: 'true'
  comment: '# * Set or get the morph map for polymorphic relations.

    # *

    # * @param  array|null  $map

    # * @param  bool  $merge

    # * @return array'
- name: buildMorphMapFromModels
  visibility: protected
  parameters:
  - name: models
    default: 'null'
  comment: '# * Builds a table-keyed array from model class names.

    # *

    # * @param  string[]|null  $models

    # * @return array|null'
- name: getMorphedModel
  visibility: public
  parameters:
  - name: alias
  comment: '# * Get the model associated with a custom polymorphic type.

    # *

    # * @param  string  $alias

    # * @return string|null'
- name: getMorphAlias
  visibility: public
  parameters:
  - name: className
  comment: '# * Get the alias associated with a custom polymorphic class.

    # *

    # * @param  string  $className

    # * @return int|string'
- name: __call
  visibility: public
  parameters:
  - name: method
  - name: parameters
  comment: '# * Handle dynamic method calls to the relationship.

    # *

    # * @param  string  $method

    # * @param  array  $parameters

    # * @return mixed'
- name: __clone
  visibility: public
  parameters: []
  comment: '# * Force a clone of the underlying query builder when cloning.

    # *

    # * @return void'
traits:
- Closure
- Illuminate\Database\Eloquent\Builder
- Illuminate\Database\Eloquent\Collection
- Illuminate\Database\Eloquent\Model
- Illuminate\Database\Eloquent\ModelNotFoundException
- Illuminate\Database\MultipleRecordsFoundException
- Illuminate\Database\Query\Expression
- Illuminate\Support\Traits\ForwardsCalls
- Illuminate\Support\Traits\Macroable
interfaces:
- BuilderContract