php - 查询生成器 : IN clause with composite columns

标签 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)
)

从这样的数组开始:

$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')
);

Source > \Cake\Database\Expression\TupleComparison

关于php - 查询生成器 : IN clause with composite columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919141/

相关文章:

cakephp - 在身份验证用户 session 中包含字段子集

cakephp - "too many redirects"在 heroku 上使用 CakePHP 的 SSL 重定向

php - 如何将模型加载到 MVC 中的 Controller 中

javascript - 从tinymce发布数据时,它不使用Codeigniter存储数据库

php - 显示与数据库数据匹配的某些数组数据

mysql - 有点复杂的 MySql 查询

CakePHP HABTM - 我不明白

php - 在两个以上的php文件中使用相同的资源(例如创建的套接字)

php - 日期减去 1 年?

php - ng-repeat 分组与 mysql