Версия Cakephp: 4.3.5
Я пытаюсь создать условие Or, которое использует выражение isNull в пользовательском средстве поиска.
В тексте я пытаюсь сделать это:
public function findMyTasks(Query $query, array $options): object
{
$query
->where([
'Tasks.status' => $options['status'],
'Tasks.user_id' => $options['user_id'],
'OR' => [
['Tasks.contact_id' => null], // HERE IS THE CONDITION
['Contacts.status' => 1]
],
]);
return $query;
}
Если бы я хотел использовать isNull в условии без ИЛИ, я бы использовал следующее:
->where(function (QueryExpression $exp, Query $q) {
return $exp->isNull('Tasks.contact_id');
})
Я пробовал различные комбинации, ссылаясь на страницу с расширенными условиями здесь, но я не могу объединить выражение с условием без синтаксической ошибки.
Вопрос:
Как я могу создать этот искатель, который использует isNull с условием ИЛИ.
Спасибо, Зенз.
Я не пробовал, и да, это работает, так что спасибо. Но я действительно хотел знать, могу ли я использовать выражение и isNull в условии.
Нет необходимости использовать выражения с такими простыми парами ключ-значение массива.
@mark Спасибо за информацию об использовании выражений и подтверждение того, что функцию isNull нельзя использовать. Но мне интересно, почему проверка на null выше в выражении более сложна, чем проверка на null в качестве пары значений ключа массива.
Как задокументировано:
'OR' => [
['Tasks.contact_id IS' => null],
['Contacts.status' => 1]
],
Чуть ниже на этой странице: https://book.cakephp.org/4/en/orm/query-builder.html#automatic-is-null-creation
Вы пробовали что-то вроде этого ``` 'ИЛИ' => [['Tasks.contact_id IS NULL'], // ВОТ УСЛОВИЕ ['Contacts.status' => 1] ], ```