CakePHP 3查询构建器为一个字段提供更多条件

时间:2015-04-07 16:20:11

标签: cakephp-3.0

我应该从动态构建的表单中构建一个sql查询。用户将在它们之间选择表文件和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时显然不好。我尝试了不同的方法,但我无法得到正确的括号。

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

1 个答案:

答案 0 :(得分:1)

我会这样做:

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