\Cake\DatasourceQueryTrait

Contains the characteristics for an object that is attached to a repository and can retrieve results based on any criteria.

Summary

Methods
Properties
Constants
repository()
getRepository()
setResult()
getIterator()
cache()
isEagerLoaded()
eagerLoaded()
aliasField()
aliasFields()
all()
toArray()
mapReduce()
getMapReducers()
formatResults()
getResultFormatters()
first()
firstOrFail()
getOptions()
__call()
applyOptions()
No public properties found
No constants found
_execute()
_decorateResults()
_decoratorClass()
$_repository
$_results
$_mapReduce
$_formatters
$_cache
$_options
$_eagerLoaded
N/A
No private methods found
No private properties found
N/A

Properties

$_mapReduce

$_mapReduce : array

List of map-reduce routines that should be applied over the query result

Type

array

$_formatters

$_formatters : array<mixed,callable>

List of formatter classes or callbacks that will post-process the results when fetched

Type

array<mixed,callable>

$_cache

$_cache : \Cake\Datasource\QueryCacher|null

A query cacher instance if this query has caching enabled.

Type

\Cake\Datasource\QueryCacher|null

$_options

$_options : array

Holds any custom options passed using applyOptions that could not be processed by any method in this class.

Type

array

$_eagerLoaded

$_eagerLoaded : boolean

Whether the query is standalone or the product of an eager load operation.

Type

boolean

Methods

repository()

repository(\Cake\Datasource\RepositoryInterface|null  $table = null) : \Cake\Datasource\RepositoryInterface|$this

Returns the default table object that will be used by this query, that is, the table that will appear in the from clause.

When called with a Table argument, the default table object will be set and this query object will be returned for chaining.

Parameters

\Cake\Datasource\RepositoryInterface|null $table

The default table object to use

Returns

\Cake\Datasource\RepositoryInterface|$this

getRepository()

getRepository() : \Cake\Datasource\RepositoryInterface

Returns the default table object that will be used by this query, that is, the table that will appear in the from clause.

Returns

\Cake\Datasource\RepositoryInterface

setResult()

setResult(\Cake\Datasource\ResultSetInterface  $results) : $this

Set the result set for a query.

Setting the resultset of a query will make execute() a no-op. Instead of executing the SQL query and fetching results, the ResultSet provided to this method will be returned.

This method is most useful when combined with results stored in a persistent cache.

Parameters

\Cake\Datasource\ResultSetInterface $results

The results this query should return.

Returns

$this

getIterator()

getIterator() : \Iterator

Executes this query and returns a results iterator. This function is required for implementing the IteratorAggregate interface and allows the query to be iterated without having to call execute() manually, thus making it look like a result set instead of the query itself.

Returns

\Iterator

cache()

cache(false|string|\Closure  $key, string|\Cake\Cache\CacheEngine  $config = 'default') : $this

Enable result caching for this query.

If a query has caching enabled, it will do the following when executed:

  • Check the cache for $key. If there are results no SQL will be executed. Instead the cached results will be returned.
  • When the cached data is stale/missing the result set will be cached as the query is executed.

Usage

// Simple string key + config
$query->cache('my_key', 'db_results');

// Function to generate key.
$query->cache(function ($q) {
  $key = serialize($q->clause('select'));
  $key .= serialize($q->clause('where'));
  return md5($key);
});

// Using a pre-built cache engine.
$query->cache('my_key', $engine);

// Disable caching
$query->cache(false);

Parameters

false|string|\Closure $key

Either the cache key or a function to generate the cache key. When using a function, this query instance will be supplied as an argument.

string|\Cake\Cache\CacheEngine $config

Either the name of the cache config to use, or a cache config instance.

Returns

$this

isEagerLoaded()

isEagerLoaded() : boolean

Returns the current configured query `_eagerLoaded` value

Returns

boolean

eagerLoaded()

eagerLoaded(boolean|null  $value = null) : $this|boolean

Sets the query instance to be an eager loaded query. If no argument is passed, the current configured query `_eagerLoaded` value is returned.

Parameters

boolean|null $value

Whether or not to eager load.

Returns

$this|boolean

aliasField()

aliasField(string  $field, string|null  $alias = null) : array

Returns a key => value array representing a single aliased field that can be passed directly to the select() method.

The key will contain the alias and the value the actual field name.

If the field is already aliased, then it will not be changed. If no $alias is passed, the default table for this query will be used.

Parameters

string $field

The field to alias

string|null $alias

the alias used to prefix the field

Returns

array

aliasFields()

aliasFields(array  $fields, string|null  $defaultAlias = null) : array

Runs `aliasField()` for each field in the provided list and returns the result under a single array.

Parameters

array $fields

The fields to alias

string|null $defaultAlias

The default alias

Returns

array

all()

all() : \Cake\Datasource\ResultSetInterface

Fetch the results for this query.

Will return either the results set through setResult(), or execute this query and return the ResultSetDecorator object ready for streaming of results.

ResultSetDecorator is a traversable object that implements the methods found on Cake\Collection\Collection.

Returns

\Cake\Datasource\ResultSetInterface

toArray()

toArray() : array

Returns an array representation of the results after executing the query.

Returns

array

mapReduce()

mapReduce(callable|null  $mapper = null, callable|null  $reducer = null, boolean  $overwrite = false) : $this|array

Register a new MapReduce routine to be executed on top of the database results Both the mapper and caller callable should be invokable objects.

The MapReduce routing will only be run when the query is executed and the first result is attempted to be fetched.

If the first argument is set to null, it will return the list of previously registered map reduce routines. This is deprecated as of 3.6.0 - use getMapReducers() instead.

If the third argument is set to true, it will erase previous map reducers and replace it with the arguments passed.

Parameters

callable|null $mapper

The mapper callable.

callable|null $reducer

The reducing function.

boolean $overwrite

Set to true to overwrite existing map + reduce functions.

Returns

$this|array

getMapReducers()

getMapReducers() : array

Returns the list of previously registered map reduce routines.

Returns

array

formatResults()

formatResults(callable|null  $formatter = null, boolean|integer  $mode) : $this|array

Registers a new formatter callback function that is to be executed when trying to fetch the results from the database.

Formatting callbacks will get a first parameter, an object implementing \Cake\Collection\CollectionInterface, that can be traversed and modified at will.

Callbacks are required to return an iterator object, which will be used as the return value for this query's result. Formatter functions are applied after all the MapReduce routines for this query have been executed.

If the first argument is set to null, it will return the list of previously registered format routines. This is deprecated as of 3.6.0 - use getResultFormatters() instead.

If the second argument is set to true, it will erase previous formatters and replace them with the passed first argument.

Example:

// Return all results from the table indexed by id
$query->select(['id', 'name'])->formatResults(function ($results) {
  return $results->indexBy('id');
});

// Add a new column to the ResultSet
$query->select(['name', 'birth_date'])->formatResults(function ($results) {
  return $results->map(function ($row) {
    $row['age'] = $row['birth_date']->diff(new DateTime)->y;
    return $row;
  });
});

Parameters

callable|null $formatter

The formatting callable.

boolean|integer $mode

Whether or not to overwrite, append or prepend the formatter.

Returns

$this|array

getResultFormatters()

getResultFormatters() : array

Returns the list of previously registered format routines.

Returns

array

first()

first() : \Cake\Datasource\EntityInterface|array|null

Returns the first result out of executing this query, if the query has not been executed before, it will set the limit clause to 1 for performance reasons.

Example:

$singleUser = $query->select(['id', 'username'])->first();

Returns

\Cake\Datasource\EntityInterface|array|null —

The first result from the ResultSet.

firstOrFail()

firstOrFail() : \Cake\Datasource\EntityInterface|array

Get the first result from the executing query or raise an exception.

Throws

\Cake\Datasource\Exception\RecordNotFoundException

When there is no first record.

Returns

\Cake\Datasource\EntityInterface|array —

The first result from the ResultSet.

getOptions()

getOptions() : array

Returns an array with the custom options that were applied to this query and that were not already processed by another method in this class.

Example:

 $query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']);
 $query->getOptions(); // Returns ['doABarrelRoll' => true]

Returns

array

__call()

__call(string  $method, array  $arguments) : mixed

Enables calling methods from the result set as if they were from this class

Parameters

string $method

the method to call

array $arguments

list of arguments for the method to call

Throws

\BadMethodCallException

if no such method exists in result set

Returns

mixed

applyOptions()

applyOptions(array  $options) : $this

Populates or adds parts to current query clauses using an array.

This is handy for passing all query clauses at once.

Parameters

array $options

the options to be applied

Returns

$this

_execute()

_execute() : \Traversable

Executes this query and returns a traversable object containing the results

Returns

\Traversable

_decorateResults()

_decorateResults(\Traversable  $result) : \Cake\Datasource\ResultSetInterface

Decorates the results iterator with MapReduce routines and formatters

Parameters

\Traversable $result

Original results

Returns

\Cake\Datasource\ResultSetInterface

_decoratorClass()

_decoratorClass() : string

Returns the name of the class to be used for decorating results

Returns

string