protected function ContentEntityStorageTrait::buildQuery in Multiversion 8.2
Same name and namespace in other branches
- 8 src/Entity/Storage/ContentEntityStorageTrait.php \Drupal\multiversion\Entity\Storage\ContentEntityStorageTrait::buildQuery()
File
- src/
Entity/ Storage/ ContentEntityStorageTrait.php, line 55
Class
Namespace
Drupal\multiversion\Entity\StorageCode
protected function buildQuery($ids, $revision_ids = FALSE) {
$query = parent::buildQuery($ids, $revision_ids);
// Prevent to modify the query before entity type updates.
if (!is_subclass_of($this->entityType
->getStorageClass(), ContentEntityStorageInterface::class)) {
return $query;
}
$revision_data_alias = 'revision';
if ($this->entityType
->isTranslatable()) {
// Join the field data table in order to set the workspace condition.
$field_data_table = $this
->getDataTable();
$field_data_alias = 'field_data';
$query
->join($field_data_table, $field_data_alias, "{$field_data_alias}.{$this->idKey} = base.{$this->idKey}");
// Join the revision data table in order to set the delete condition.
$revision_data_table = $this
->getRevisionDataTable();
$revision_data_alias = 'revision_data';
if ($revision_ids) {
$query
->join($revision_data_table, $revision_data_alias, "{$revision_data_alias}.{$this->revisionKey} = revision.{$this->revisionKey} AND {$revision_data_alias}.{$this->revisionKey} IN (:revisionIds[])", [
':revisionIds[]' => (array) $revision_ids,
]);
}
else {
$query
->join($revision_data_table, $revision_data_alias, "{$revision_data_alias}.{$this->revisionKey} = revision.{$this->revisionKey}");
}
}
$workspace = Workspace::load($this
->getWorkspaceId());
if (!$workspace
->isDefaultWorkspace()) {
$query
->addMetaData('active_workspace_id', $workspace
->id());
$query
->addMetaData('simple_query', FALSE);
// LEFT JOIN 'workspace_association' to the base table of the query so we
// can properly include live content along with a possible workspace
// revision.
$workspace_association_table = 'workspace_association';
$query
->leftJoin($workspace_association_table, $workspace_association_table, "%alias.target_entity_type_id = '{$this->entityTypeId}' AND %alias.target_entity_id = base.{$this->idKey}");
$query
->condition($query
->orConditionGroup()
->condition("{$workspace_association_table}.workspace", $workspace
->id())
->condition("{$workspace_association_table}.workspace", NULL, 'IS'));
}
// Loadings a revision is explicit. So when we try to load one we should do
// so without a condition on the deleted flag.
if (!$revision_ids) {
$query
->condition("{$revision_data_alias}._deleted", (int) $this->isDeleted);
}
return $query;
}