$query 组合嵌套约束

Mar*_*ert 1 typo3 extbase

我有以下查询:

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

这个查询有效。现在我有一个新的约束,我想添加它locigalAnd。我怎样才能做到这一点?

新的约束是:

$constraint[] = $query->contains('categories', $myCategory);
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它们结合起来?

Jon*_*rle 5

我喜欢这样说:

$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);
Run Code Online (Sandbox Code Playgroud)

但这只是风格问题。如果你更喜欢它,你当然可以用一种表达来强制它。

请记住,您可以将单个表达式的数组传递给 ->logicAnd() 和 -Or() - 函数,并且可以将它们嵌套到您想要的深度。