Код звонит выполнять() на объекте, возвращенном из $запрос->andConditionGroup(), но этот объект не реализует никаких выполнять() метод.
Правильный способ использования и группа условий () показано в QueryBase::andConditionGroup().
$query = \Drupal::entityQuery('рисунок');
$group = $query->andConditionGroup()
->условие('цифры.цвет', 'красный')
->условие('figures.shape', 'треугольник');
$ запрос-> условие ($ группа);
$group = $query->andConditionGroup()
->условие('цифры.цвет', 'синий')
->условие('figures.shape', 'круг');
$ запрос-> условие ($ группа);
$entity_ids = $запрос->выполнить();
В вашем случае с помощью и группа условий () не требуется, поскольку запрос, выполняемый этим кодом, возвращает все узлы, для которых:
- Тип контента Уровень 3
- Название
$file_name
- Статус 0
Он не возвращает все узлы, для которых выполняется хотя бы одно из этих условий. Это похоже на то, что делает следующий код, который возвращает все страница узлы, где значение field_some_field выше 14.
$query = \Drupal::entityQuery('узел')
->условие('тип', 'страница')
->условие('field_some_field', 14, '>');
$результаты = $запрос->выполнить();
$запрос->выполнить() возвращает массив идентификаторов сущностей, а не сущность и не массив сущностей. $nids = $запрос->выполнить(); $nids->setPublished(TRUE)->save(); по-прежнему неверно, так как массив не реализует setPublished () метод.
Учитывая массив идентификаторов узлов $ниды, правильный код для загрузки узлов следующий.
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
$узлы будет содержать массив сущностей. Опубликовать их можно с помощью следующего кода.
foreach ($nodes как $node) {
$node->setPublished(TRUE)->save();
}
Объект вернулся из \Drupal::entityQuery() проверяет, что текущий пользователь, вошедший в систему, имеет доступ к просмотру возвращаемых узлов. В большинстве случаев у пользователя нет доступа к неопубликованным узлам. Чтобы запрос не возвращал только те узлы, которые может просматривать вошедший в данный момент пользователь, необходимо вызвать $запрос->проверка доступа(ЛОЖЬ), как в $query = \Drupal::entityQuery('узел')->checkAccess(FALSE);
Кроме того, существует ('нид') call не требуется, так как идентификатор узла всегда сохраняется для узлов.
Оставляя петлю на $i_selected, я бы использовал следующий код.
$query = \Drupal::entityQuery('узел')->checkAccess(FALSE);
$nids = $query->условие('тип', 'уровень3')
->условие('название', $file_name)
->условие('статус', '0')
->выполнить();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
foreach ($nodes как $node) {
$node->setPublished(TRUE)->save();
}