protected function Query::prepare in Drupal 9
Same name in this branch
- 9 core/modules/workspaces/src/EntityQuery/Query.php \Drupal\workspaces\EntityQuery\Query::prepare()
- 9 core/lib/Drupal/Core/Entity/Query/Sql/Query.php \Drupal\Core\Entity\Query\Sql\Query::prepare()
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Entity/Query/Sql/Query.php \Drupal\Core\Entity\Query\Sql\Query::prepare()
Prepares the basic query with proper metadata/tags and base fields.
Return value
$this Returns the called object.
Throws
\Drupal\Core\Entity\Query\QueryException Thrown if the base table does not exist.
1 call to Query::prepare()
- QueryAggregate::prepare in core/
lib/ Drupal/ Core/ Entity/ Query/ Sql/ QueryAggregate.php - Prepares the basic query with proper metadata/tags and base fields.
2 methods override Query::prepare()
- Query::prepare in core/
modules/ workspaces/ src/ EntityQuery/ Query.php - Prepares the basic query with proper metadata/tags and base fields.
- QueryAggregate::prepare in core/
lib/ Drupal/ Core/ Entity/ Query/ Sql/ QueryAggregate.php - Prepares the basic query with proper metadata/tags and base fields.
File
- core/
lib/ Drupal/ Core/ Entity/ Query/ Sql/ Query.php, line 95
Class
- Query
- The SQL storage entity query class.
Namespace
Drupal\Core\Entity\Query\SqlCode
protected function prepare() {
if ($this->allRevisions) {
if (!($base_table = $this->entityType
->getRevisionTable())) {
throw new QueryException("No revision table for " . $this->entityTypeId . ", invalid query.");
}
}
else {
if (!($base_table = $this->entityType
->getBaseTable())) {
throw new QueryException("No base table for " . $this->entityTypeId . ", invalid query.");
}
}
$simple_query = TRUE;
if ($this->entityType
->getDataTable()) {
$simple_query = FALSE;
}
$this->sqlQuery = $this->connection
->select($base_table, 'base_table', [
'conjunction' => $this->conjunction,
]);
// Reset the tables structure, as it might have been built for a previous
// execution of this query.
$this->tables = NULL;
$this->sqlQuery
->addMetaData('entity_type', $this->entityTypeId);
$id_field = $this->entityType
->getKey('id');
// Add the key field for fetchAllKeyed().
if (!($revision_field = $this->entityType
->getKey('revision'))) {
// When there is no revision support, the key field is the entity key.
$this->sqlFields["base_table.{$id_field}"] = [
'base_table',
$id_field,
];
// Now add the value column for fetchAllKeyed(). This is always the
// entity id.
$this->sqlFields["base_table.{$id_field}" . '_1'] = [
'base_table',
$id_field,
];
}
else {
// When there is revision support, the key field is the revision key.
$this->sqlFields["base_table.{$revision_field}"] = [
'base_table',
$revision_field,
];
// Now add the value column for fetchAllKeyed(). This is always the
// entity id.
$this->sqlFields["base_table.{$id_field}"] = [
'base_table',
$id_field,
];
}
// Add a self-join to the base revision table if we're querying only the
// latest revisions.
if ($this->latestRevision && $revision_field) {
$this->sqlQuery
->leftJoin($base_table, 'base_table_2', "[base_table].[{$id_field}] = [base_table_2].[{$id_field}] AND [base_table].[{$revision_field}] < [base_table_2].[{$revision_field}]");
$this->sqlQuery
->isNull("base_table_2.{$id_field}");
}
if (is_null($this->accessCheck)) {
$this->accessCheck = TRUE;
@trigger_error('Relying on entity queries to check access by default is deprecated in drupal:9.2.0 and an error will be thrown from drupal:10.0.0. Call \\Drupal\\Core\\Entity\\Query\\QueryInterface::accessCheck() with TRUE or FALSE to specify whether access should be checked. See https://www.drupal.org/node/3201242', E_USER_DEPRECATED);
}
if ($this->accessCheck) {
$this->sqlQuery
->addTag($this->entityTypeId . '_access');
}
$this->sqlQuery
->addTag('entity_query');
$this->sqlQuery
->addTag('entity_query_' . $this->entityTypeId);
// Add further tags added.
if (isset($this->alterTags)) {
foreach ($this->alterTags as $tag => $value) {
$this->sqlQuery
->addTag($tag);
}
}
// Add further metadata added.
if (isset($this->alterMetaData)) {
foreach ($this->alterMetaData as $key => $value) {
$this->sqlQuery
->addMetaData($key, $value);
}
}
// This now contains first the table containing entity properties and
// last the entity base table. They might be the same.
$this->sqlQuery
->addMetaData('all_revisions', $this->allRevisions);
$this->sqlQuery
->addMetaData('simple_query', $simple_query);
return $this;
}