$ query объединяет вложенные ограничения - PullRequest
0 голосов
/ 05 ноября 2018

У меня следующий запрос:

$query = $this->createQuery();
$constraint = [];
$constraint[] = $query->like('title', '%' . $searchTerm . '%');
$constraint[] = $query->like('description', '%' . $searchTerm . '%');
$query->matching($query->logicalOr($constraint));

Этот запрос работает. Теперь у меня есть новое ограничение, которое я хочу добавить с locigalAnd. Как я могу это сделать?

Новое ограничение:

$constraint[] = $query->contains('categories', $myCategory);

Как я могу их объединить?

1 Ответ

0 голосов
/ 05 ноября 2018

Мне нравится это так:

$q = $this->createQuery();

$titleOrDescriptionConstraints = $q->logicalOr(
  [
    $q->like('title', '%' . $searchTerm . '%'),
    $q->like('description', '%' . $searchTerm . '%'),
  ]
);

$constraints = $q->logicalAnd(
  [
    $titleOrDescriptionConstraints,
    $q->contains('categories', $myCategory),
  ]
);

$res = $q->matching($constraints);

Но это просто вопрос стиля. Если вам это нравится больше, вы, конечно, можете привести его в одно выражение.

Просто помните, что вы можете передавать массивы одиночных выражений в функции -> logicAnd () и -Or () - и что вы можете вкладывать их настолько глубоко, насколько захотите.

...