ari*_*lia 1 php mysql cakephp cakephp-3.0
我需要在多列上创建一个 IN 条件,就像这样
...
WHERE
(order_date, order_number) IN (
('2016-03-11', 3455453),
('2016-03-18', 83545454),
('2016-06-17', 5354544)
)
Run Code Online (Sandbox Code Playgroud)
从这样的数组开始:
$orders = [
['2016-03-11', 3455453],
['2016-03-18', 83545454],
['2016-06-17', 5354544]
];
Run Code Online (Sandbox Code Playgroud)
使用 cake3 查询生成器。我试过
->where(['(order_date, order_number) IN' => $orders]);
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
无法将值转换为字符串
我知道手动创建操作数组的查询并不难,但我想知道是否有一种蛋糕的方法来做到这一点。
AFAICT(还)使用数组语法或正则比较表达式是不可能的,负责转换的代码仅处理单个字段和平面数组,请参阅
源 > \Cake\Database\Expression\Comparison::_stringExpression()
然而,这很可能使用元组比较表达式,它支持开箱即用地处理元组集。在内部,它被关联用于处理复合键。
$fields = ['order_date', 'order_number'];
$types = ['date', 'integer'];
$values = [
['2016-03-11', 3455453],
['2016-03-18', 83545454],
['2016-06-17', 5354544]
];
$query->where(
new \Cake\Database\Expression\TupleComparison($fields, $values, $types, 'IN')
);
Run Code Online (Sandbox Code Playgroud)
源 > \Cake\Database\Expression\TupleComparison