CakePHP 3 查询生成器针对一个字段的更多条件

CakePHP 3 query builder more conditions for one field

我应该从动态构建的表单中构建一个 sql 查询。用户将 select table 字段和 AND/OR 之间的逻辑条件。所以最后我应该有一个像这样的 SQL 查询:

WHERE (
  name LIKE "%foo%"
  OR name LIKE "%bar%"
)
AND (
  ad = "BP"
  OR ad = "SV"
)

我试过了

$query
  ->where(['Contacts.name LIKE' => '%foo%'])
  ->orWhere(['Contacts.cname LIKE' => '%bar%'])
  ->andWhere(function($exp){
               return $exp->or_(
                          ['Contacts.ad' => 'BP'],
                          ['Contacts.ad' => 'SV']
                      );
                })
              );

我覆盖Contacts.ad显然不好的地方。我尝试了不同的方法,但我无法得到正确的括号。

实际问题更复杂,因为它可能包含更多字段,而不仅仅是这两个(名称和广告)

我会这样做:

$query->where(['Contacts.name LIKE' => '%foo%'])
    ->orWhere(['Contacts.cname LIKE' => '%bar%'])
    ->andWhere([
        'OR' => [
            ['Contacts.ad' => 'BP'],
            ['Contacts.ad' => 'SV']
        ]
    ]);