Мне нравится это так:
$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 () - и что вы можете вкладывать их настолько глубоко, насколько захотите.