所以我一直在使用FluentPDO,但我似乎无法找到一种做OR子句的方法,自动添加AND的地方我不会看到绕过它。
这是我需要创建的SQL语句的类型。
SELECT *
FROM `items`
WHERE `item_var` LIKE '%test%'
OR `item_text` LIKE '%test%'
OR `item_int` LIKE '%test%'
OR `item_select` LIKE '%test%'
ORDER BY row_id
答案 0 :(得分:1)
我对图书馆不熟悉,但在查看来源后,如果不将OR
代码放入where()
来电,这似乎不太可能手动
根据where
method's docblock,它会在每个连续的子句前加AND
。
它不是世界上最具表现力的代码,但似乎您必须手动设置OR
:
->where('(item_text LIKE "%test%" OR item_int LIKE "%test%" OR item_select LIKE "%test%")')
只要您只使用OR
,您就可以通过将它们放入数组并implode()
来清理它们。也许这样的事情会起作用:
$conditions = [
'item_text LIKE "%test%"',
'item_int LIKE "%test%"',
'item_select LIKE "%test%"',
];
$orWhere = implode(" OR ", $conditions);
$query = $fpdo->from('items')->where("($orWhere)");
(编辑:语法)
答案 1 :(得分:1)
有这样的方法
$where['k1'] = $v1
$where[' ( k2 in (' . $v2 . ') or k3 in (?) )'] = $v3