简体   繁体   English

createQueryBuilder中AND条件内的OR条件取决于条件

[英]OR condition inside AND condition in createQueryBuilder depend on condition

We need all active records using "tag" which matches search string in createQueryBuilder . 我们需要所有使用“ tag”的活动记录,这些记录与createQueryBuilder中的search字符串匹配。

For Ex: Search for "NEW YORK" which internally search for "NEW" or "YORK" in Tags "new, ab, other" 例如:搜索“ NEW YORK”,该内部在标签“ new,ab,other”中搜索“ NEW”或“ YORK”

My CODE: 我的密码:

$query = $this->createQueryBuilder();
$query->field('status')->equals("active");
if (isset($params["search"]) && !empty($params["search"])) {
    $searchArr = explode(" ", $params["search"]);
    foreach ($searchArr as $searchVal) {
        $query->addOr(
             $query->expr()->addOr($query->expr()->field('tags')->equals(new \MongoRegex('/.*' . $searchVal . '.*/')))
        );
    }
}

It will give result active OR (tag1 Or tag2) . 它将使结果为active OR (tag1 Or tag2) Expected result active AND (tag1 Or tag2) 预期结果active AND (tag1 Or tag2)

Any suggestions? 有什么建议么?

Replace this 取代这个

foreach ($searchArr as $searchVal) {
    $query->addOr(

by this 这样

foreach ($searchArr as $searchVal) {
    $query->addAnd(

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM