我需要在多列上创建一个 IN 条件,就像这样
...
WHERE
(order_date, order_number) IN (
('2016-03-11', 3455453),
('2016-03-18', 83545454),
('2016-06-17', 5354544)
)
从这样的数组开始:
$orders = [
['2016-03-11', 3455453],
['2016-03-18', 83545454],
['2016-06-17', 5354544]
];
使用 cake3 查询生成器。我试过
->where(['(order_date, order_number) IN' => $orders]);
但是我得到一个错误:
Cannot convert value to string
我知道手动创建操作数组的查询并不难,但我想知道是否有简单的方法可以做到这一点。
最佳答案
AFAICT(目前)使用数组语法或正则比较表达式是不可能的,负责转换的代码仅处理单个字段和平面数组,请参阅
Source > \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')
);
关于php - 查询生成器 : IN clause with composite columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919141/