Запрос Друпал к БД

Главные вкладки

Аватар пользователя mmjmm mmjmm 19 августа 2022 в 13:32

Здравствуйте.
У меня есть кастомная сущность. У нее есть одни из полей - status, access, uid

Мне надо написать запрос через $query = \Drupal::entityTypeManager()->getStorage('dt_stock_entity')->getQuery();

Условие должно быть такое :
Выбрать записи, у которых uid == id текущего пользователя ИЛИ (status = 1 && access == 1)

Подскажите, пожалуйста, как это можно сделать?

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 19 августа 2022 в 14:46
1

ivnish wrote: Нужно использовать loadByProperties

Метод loadByProperties не поддерживает операторы типа OR и тем более - вложенную группировку условий.

Уместнее обычный ::entityQuery(), а-ля:

<?php
$query 
= \Drupal::entityQuery('dt_stock_entity');

$andGroup $query->andConditionGroup();
$andGroup->condition('status'1);
$andGroup->condition('access'1);

$orGroup $query->orConditionGroup();
$orGroup->condition('uid', \Drupal::currentUser()->id());
$orGroup->condition($andGroup);
$query->condition($orGroup);

$ids $query->execute();

if (!empty(

$ids)) {
  
$entities = \Drupal::entityTypeManager()->getStorage('dt_stock_entity')->loadMultiple($ids);
  ...
}
?>

Комментарии

Аватар пользователя ivnish ivnish 19 августа 2022 в 13:38

Нужно использовать loadByProperties

<?php $fields = \Drupal::entityTypeManager()
    ->
getStorage('field_config')
    ->
loadByProperties([
      
'entity_type' => $mask,
      
'bundle' => $bundle,
    ]);
?>
Аватар пользователя OldWarrior OldWarrior 19 августа 2022 в 14:46
1

ivnish wrote: Нужно использовать loadByProperties

Метод loadByProperties не поддерживает операторы типа OR и тем более - вложенную группировку условий.

Уместнее обычный ::entityQuery(), а-ля:

<?php
$query 
= \Drupal::entityQuery('dt_stock_entity');

$andGroup $query->andConditionGroup();
$andGroup->condition('status'1);
$andGroup->condition('access'1);

$orGroup $query->orConditionGroup();
$orGroup->condition('uid', \Drupal::currentUser()->id());
$orGroup->condition($andGroup);
$query->condition($orGroup);

$ids $query->execute();

if (!empty(

$ids)) {
  
$entities = \Drupal::entityTypeManager()->getStorage('dt_stock_entity')->loadMultiple($ids);
  ...
}
?>