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']
]
]);
我应该从动态构建的表单中构建一个 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']
]
]);