Class SelectWithPivotLoader
Implements the logic for loading an association using a SELECT query and a pivot table
Properties summary
- $alias protected
string
The alias of the association loading the results
- $associationType protected
string
The type of the association triggering the load
- $bindingKey protected
string
The binding key for the source association.
- $finder protected
callable
A callable that will return a query object used for loading the association results
- $foreignKey protected
string|array
The foreignKey to the target association
- $junctionAssoc protected
\Cake\ORM\Association\HasMany
The junction association instance
- $junctionAssociationName protected
string
The name of the junction association
- $junctionConditions protected
string|array|\Cake\Database\ExpressionInterface|\Closure|null
Custom conditions for the junction association
- $junctionProperty protected
string
The property name for the junction association, where its results should be nested at.
- $sort protected
string
The sorting options for loading the association
- $sourceAlias protected
string
The alias of the source association
- $strategy protected
string
The strategy to use for loading, either select or subquery
- $targetAlias protected
string
The alias of the target association
Method Summary
- __construct() public
Copies the options array to properties in this class. The keys in the array correspond to properties in this class.
- _addFilteringCondition() protected
Appends any conditions required to load the relevant set of records in the target table query given a filter key and some filtering values.
- _addFilteringJoin() protected
Appends any conditions required to load the relevant set of records in the target table query given a filter key and some filtering values when the filtering needs to be done using a subquery.
- _assertFieldsPresent() protected
Checks that the fetching query either has auto fields on or has the foreignKey fields selected.
- _buildQuery() protected
Auxiliary function to construct a new Query object to return all the records in the target table that are associated to those specified in $options from the source table.
- _buildResultMap() protected
Builds an array containing the results from fetchQuery indexed by the foreignKey value corresponding to this association.
- _buildSubquery() protected
Builds a query to be used as a condition for filtering records in the target table, it is constructed by cloning the original query that was used to load records in the source table.
- _createTupleCondition() protected
Returns a TupleComparison object that can be used for matching all the fields from $keys with the tuple values in $filter using the provided operator.
- _linkField() protected
Generates a string used as a table field that contains the values upon which the filter should be applied
- _multiKeysInjector() protected
Returns a callable to be used for each row in a query result set for injecting the eager loaded rows when the matching needs to be done with multiple foreign keys
- _resultInjector() protected
Returns a callable to be used for each row in a query result set for injecting the eager loaded rows
- buildEagerLoader() public
Returns a callable that can be used for injecting association results into a given iterator. The options accepted by this method are the same as
Association::eagerLoader()
Method Detail
__construct() public
__construct(array $options)
Copies the options array to properties in this class. The keys in the array correspond to properties in this class.
Parameters
-
array
$options Properties to be copied to this class
_addFilteringCondition() protected
_addFilteringCondition(\Cake\ORM\Query $query, mixed $key, mixed $filter)
Appends any conditions required to load the relevant set of records in the target table query given a filter key and some filtering values.
Parameters
-
\Cake\ORM\Query
$query Target table's query
-
string|array
$key The fields that should be used for filtering
-
mixed
$filter The value that should be used to match for $key
Returns
\Cake\ORM\Query
_addFilteringJoin() protected
_addFilteringJoin(\Cake\ORM\Query $query, mixed $key, mixed $subquery)
Appends any conditions required to load the relevant set of records in the target table query given a filter key and some filtering values when the filtering needs to be done using a subquery.
Parameters
-
\Cake\ORM\Query
$query Target table's query
-
string|string[]
$key the fields that should be used for filtering
-
\Cake\ORM\Query
$subquery The Subquery to use for filtering
Returns
\Cake\ORM\Query
_assertFieldsPresent() protected
_assertFieldsPresent(\Cake\ORM\Query $fetchQuery, array $key)
Checks that the fetching query either has auto fields on or has the foreignKey fields selected.
If the required fields are missing, throws an exception.
Parameters
-
\Cake\ORM\Query
$fetchQuery The association fetching query
-
array
$key The foreign key fields to check
Throws
InvalidArgumentException
_buildQuery() protected
_buildQuery(array $options)
Auxiliary function to construct a new Query object to return all the records in the target table that are associated to those specified in $options from the source table.
This is used for eager loading records on the target table based on conditions.
Parameters
-
array
$options options accepted by eagerLoader()
Returns
\Cake\ORM\Query
Throws
InvalidArgumentException
When a key is required for associations but not selected.
_buildResultMap() protected
_buildResultMap(\Cake\ORM\Query $fetchQuery, array $options)
Builds an array containing the results from fetchQuery indexed by the foreignKey value corresponding to this association.
Parameters
-
\Cake\ORM\Query
$fetchQuery The query to get results from
-
array
$options The options passed to the eager loader
Returns
array
Throws
RuntimeException
when the association property is not part of the results set.
_buildSubquery() protected
_buildSubquery(\Cake\ORM\Query $query)
Builds a query to be used as a condition for filtering records in the target table, it is constructed by cloning the original query that was used to load records in the source table.
Parameters
-
\Cake\ORM\Query
$query the original query used to load source records
Returns
\Cake\ORM\Query
_createTupleCondition() protected
_createTupleCondition(\Cake\ORM\Query $query, array $keys, mixed $filter, mixed $operator)
Returns a TupleComparison object that can be used for matching all the fields from $keys with the tuple values in $filter using the provided operator.
Parameters
-
\Cake\ORM\Query
$query Target table's query
-
string[]
$keys the fields that should be used for filtering
-
mixed
$filter the value that should be used to match for $key
-
string
$operator The operator for comparing the tuples
Returns
\Cake\Database\Expression\TupleComparison
_defaultOptions() protected
_defaultOptions()
Returns the default options to use for the eagerLoader
Returns
array
_extractFinder() protected
_extractFinder(mixed $finderData)
Helper method to infer the requested finder and its options.
Returns the inferred options from the finder $type.
Examples:
The following will call the finder 'translations' with the value of the finder as its options: $query->contain(['Comments' => ['finder' => ['translations']]]); $query->contain(['Comments' => ['finder' => ['translations' => []]]]); $query->contain(['Comments' => ['finder' => ['translations' => ['locales' => ['en_US']]]]]);
Parameters
-
string|array
$finderData The finder name or an array having the name as key and options as value.
Returns
array
_linkField() protected
_linkField(array $options)
Generates a string used as a table field that contains the values upon which the filter should be applied
Parameters
-
array
$options the options to use for getting the link field.
Returns
string|string[]
_multiKeysInjector() protected
_multiKeysInjector(array $resultMap, array $sourceKeys, string $nestKey)
Returns a callable to be used for each row in a query result set for injecting the eager loaded rows when the matching needs to be done with multiple foreign keys
Parameters
-
array
$resultMap A keyed arrays containing the target table
-
string[]
$sourceKeys An array with aliased keys to match
-
string
$nestKey The key under which results should be nested
Returns
\Closure
_resultInjector() protected
_resultInjector(\Cake\ORM\Query $fetchQuery, array $resultMap, array $options)
Returns a callable to be used for each row in a query result set for injecting the eager loaded rows
Parameters
-
\Cake\ORM\Query
$fetchQuery the Query used to fetch results
-
array
$resultMap an array with the foreignKey as keys and the corresponding target table results as value.
-
array
$options The options passed to the eagerLoader method
Returns
\Closure
_subqueryFields() protected
_subqueryFields(\Cake\ORM\Query $query)
Calculate the fields that need to participate in a subquery.
Normally this includes the binding key columns. If there is a an ORDER BY, those columns are also included as the fields may be calculated or constant values, that need to be present to ensure the correct association data is loaded.
Parameters
-
\Cake\ORM\Query
$query The query to get fields from.
Returns
array
The list of fields for the subquery.
buildEagerLoader() public
buildEagerLoader(array $options)
Returns a callable that can be used for injecting association results into a given iterator. The options accepted by this method are the same as Association::eagerLoader()
Parameters
-
array
$options Same options as
Association::eagerLoader()
Returns
\Closure
Property Detail
$alias protected
The alias of the association loading the results
Type
string
$associationType protected
The type of the association triggering the load
Type
string
$bindingKey protected
The binding key for the source association.
Type
string
$finder protected
A callable that will return a query object used for loading the association results
Type
callable
$foreignKey protected
The foreignKey to the target association
Type
string|array
$junctionAssoc protected
The junction association instance
Type
\Cake\ORM\Association\HasMany
$junctionAssociationName protected
The name of the junction association
Type
string
$junctionConditions protected
Custom conditions for the junction association
Type
string|array|\Cake\Database\ExpressionInterface|\Closure|null
$junctionProperty protected
The property name for the junction association, where its results should be nested at.
Type
string
$sort protected
The sorting options for loading the association
Type
string
$sourceAlias protected
The alias of the source association
Type
string
$strategy protected
The strategy to use for loading, either select or subquery
Type
string
$targetAlias protected
The alias of the target association
Type
string
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.1/class-Cake.ORM.Association.Loader.SelectWithPivotLoader.html