Class SelectLoader
Implements the logic for loading an association using a SELECT query
Property Summary
- 
        $alias protected
stringThe alias of the association loading the results
 - 
        $associationType protected
stringThe type of the association triggering the load
 - 
        $bindingKey protected
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
string|arrayThe foreignKey to the target association
 - 
        $sort protected
stringThe 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, throws an exception.
 - 
          
_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 $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, string|array $key, mixed $filter): Cake\ORM\Query
      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, string $key, Cake\ORM\Query $subquery): Cake\ORM\Query
      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$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): void
      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
Returns
voidThrows
InvalidArgumentException_buildQuery() ¶ protected
_buildQuery(array $options): Cake\ORM\Query
      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
Parameters
- 
                
array$options options accepted by eagerLoader()
Returns
Cake\ORM\QueryThrows
InvalidArgumentExceptionWhen a key is required for associations but not selected.
_buildResultMap() ¶ protected
_buildResultMap(Cake\ORM\Query $fetchQuery, array $options): array
      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_buildSubquery() ¶ protected
_buildSubquery(Cake\ORM\Query $query): Cake\ORM\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, 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$query Target table's query
- 
                
array$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
      Returns the default options to use for the eagerLoader
Returns
array_extractFinder() ¶ protected
_extractFinder(string|array $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
- 
                
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): string|array
      Generates a string used as a table field that contains the values upon which the filter should be applied
Parameters
- 
                
array$options The options for getting the link field.
Returns
string|array_multiKeysInjector() ¶ protected
_multiKeysInjector(array $resultMap, array $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$resultMap A keyed arrays containing the target table
- 
                
array$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): 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$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): 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$query The query to get fields from.
Returns
arrayThe list of fields for the subquery.
buildEagerLoader() ¶ public
buildEagerLoader(array $options): callable
      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
callableProperty Detail
$finder ¶ protected
A callable that will return a query object used for loading the association results
Type
callable