Class SelectWithPivotLoader
Implements the logic for loading an association using a SELECT query and a pivot table
Property Summary
-
$alias protected
stringThe alias of the association loading the results
-
$associationType protected
stringThe type of the association triggering the load
-
$bindingKey protected
array|stringThe binding key for the source association.
-
$finder protected
callableA callable that will return a query object used for loading the association results
-
$foreignKey protected
array|stringThe foreignKey to the target association
-
$junctionAssoc protected
Cake\ORM\Association\HasMany<Cake\ORM\Table>The junction association instance
-
$junctionAssociationName protected
stringThe name of the junction association
-
$junctionConditions protected
Cake\Database\ExpressionInterface|Closure|array|string|nullCustom conditions for the junction association
-
$junctionProperty protected
stringThe property name for the junction association, where its results should be nested at.
-
$sort protected
Cake\Database\ExpressionInterface|Closure|array|string|nullThe sorting options for loading the association
-
$sourceAlias protected
stringThe alias of the source association
-
$strategy protected
stringThe strategy to use for loading, either select or subquery
-
$targetAlias protected
stringThe 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. If the required fields are missing, automatically adds them to ensure entities can be properly identified and loaded.
-
_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.
-
_defaultOptions() protected
Returns the default options to use for the eagerLoader
-
_extractFinder() protected
Helper method to infer the requested finder and its options.
-
_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
-
_subqueryFields() protected
Calculate the fields that need to participate in a subquery.
-
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<string, mixed> $options)
Copies the options array to properties in this class. The keys in the array correspond to properties in this class.
Parameters
-
array<string, mixed>$options
_addFilteringCondition() ¶ protected
_addFilteringCondition(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $query, array<string>|string $key, mixed $filter): Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>
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\SelectQuery<Cake\Datasource\EntityInterface|array>$query Target table's query
-
array<string>|string$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\SelectQuery<Cake\Datasource\EntityInterface|array>_addFilteringJoin() ¶ protected
_addFilteringJoin(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $query, array<string>|string $key, Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $subquery): Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>
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\SelectQuery<Cake\Datasource\EntityInterface|array>$query Target table's query
-
array<string>|string$key the fields that should be used for filtering
-
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>$subquery The Subquery to use for filtering
Returns
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>_assertFieldsPresent() ¶ protected
_assertFieldsPresent(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $fetchQuery, array<string> $key): void
Checks that the fetching query either has auto fields on or has the foreignKey fields selected. If the required fields are missing, automatically adds them to ensure entities can be properly identified and loaded.
Parameters
-
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>$fetchQuery The association fetching query
-
array<string>$key The foreign key fields to check
Returns
void_buildQuery() ¶ protected
_buildQuery(array<string, mixed> $options): Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>
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<string, mixed>$options options accepted by eagerLoader()
Returns
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>Throws
InvalidArgumentExceptionWhen a key is required for associations but not selected.
_buildResultMap() ¶ protected
_buildResultMap(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $fetchQuery, array<string, mixed> $options): array<string, mixed>
Builds an array containing the results from fetchQuery indexed by the foreignKey value corresponding to this association.
Parameters
-
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>$fetchQuery The query to get results from
-
array<string, mixed>$options The options passed to the eager loader
Returns
array<string, mixed>Throws
Cake\Database\Exception\DatabaseExceptionwhen the association property is not part of the results set.
_buildSubquery() ¶ protected
_buildSubquery(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $query): Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>
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\SelectQuery<Cake\Datasource\EntityInterface|array>$query the original query used to load source records
Returns
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>_createTupleCondition() ¶ protected
_createTupleCondition(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $query, array<string> $keys, mixed $filter, string $operator): Cake\Database\Expression\TupleComparison
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\SelectQuery<Cake\Datasource\EntityInterface|array>$query Target table's query
-
array<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(): array<string, mixed>
Returns the default options to use for the eagerLoader
Returns
array<string, mixed>_extractFinder() ¶ protected
_extractFinder(array|string $finderData): array
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
-
array|string$finderData The finder name or an array having the name as key and options as value.
Returns
array_linkField() ¶ protected
_linkField(array<string, mixed> $options): array<string>|string
Generates a string used as a table field that contains the values upon which the filter should be applied
Parameters
-
array<string, mixed>$options the options to use for getting the link field.
Returns
array<string>|string_multiKeysInjector() ¶ protected
_multiKeysInjector(array<string, mixed> $resultMap, array<string> $sourceKeys, string $nestKey): Closure
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<string, mixed>$resultMap A keyed arrays containing the target table
-
array<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\SelectQuery<Cake\Datasource\EntityInterface|array> $fetchQuery, array<string, mixed> $resultMap, array<string, mixed> $options): Closure
Returns a callable to be used for each row in a query result set for injecting the eager loaded rows
Parameters
-
Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array>$fetchQuery the Query used to fetch results
-
array<string, mixed>$resultMap an array with the foreignKey as keys and the corresponding target table results as value.
-
array<string, mixed>$options The options passed to the eagerLoader method
Returns
Closure_subqueryFields() ¶ protected
_subqueryFields(Cake\ORM\Query\SelectQuery<Cake\Datasource\EntityInterface|array> $query): array<string, array>
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\SelectQuery<Cake\Datasource\EntityInterface|array>$query The query to get fields from.
Returns
array<string, array>The list of fields for the subquery.
buildEagerLoader() ¶ public
buildEagerLoader(array<string, mixed> $options): Closure
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<string, mixed>$options Same options as
Association::eagerLoader()
Returns
ClosureProperty Detail
$finder ¶ protected
A callable that will return a query object used for loading the association results
Type
callable$junctionAssoc ¶ protected
The junction association instance
Type
Cake\ORM\Association\HasMany<Cake\ORM\Table>$junctionConditions ¶ protected
Custom conditions for the junction association
Type
Cake\Database\ExpressionInterface|Closure|array|string|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
Cake\Database\ExpressionInterface|Closure|array|string|null