我应该从动态构建的表单中构建一个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时显然不好。我尝试了不同的方法,但我无法得到正确的括号。
实际问题更复杂,因为它可能包含更多文件,而不仅仅是这两个(名称和广告)
答案 0 :(得分:1)
我会这样做:
$query->where(['Contacts.name LIKE' => '%foo%'])
->orWhere(['Contacts.cname LIKE' => '%bar%'])
->andWhere([
'OR' => [
['Contacts.ad' => 'BP'],
['Contacts.ad' => 'SV']
]
]);