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

  • string

    The name of the junction association

  • 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.

  • _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, 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