Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP 3-使用多个条件查找_Php_Cakephp_Cakephp 3.0 - Fatal编程技术网

CakePHP 3-使用多个条件查找

CakePHP 3-使用多个条件查找,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我正在尝试进行查询,以查找具有特定集合或ID的所有行 例如,我想查找具有以下值之一的device_id字段的all: 1. 3. 五, 我尝试将其添加为数组,但出现以下错误: 无法将值转换为整数 这是我的密码: $revenuesQuery = $revenues->find('all', [ 'conditions' => [ 'device_id' => [1, 3, 5], 'date' => date

我正在尝试进行查询,以查找具有特定集合或ID的所有行

例如,我想查找具有以下值之一的device_id字段的all: 1. 3. 五,

我尝试将其添加为数组,但出现以下错误: 无法将值转换为整数

这是我的密码:

$revenuesQuery = $revenues->find('all', [
        'conditions' => [
            'device_id' => [1, 3, 5],
            'date' => date('Y-m-d')
        ]
    ]);
如您所见,设备_id是一个整数数组(3和4),我不希望有其中一个(3或4)的行。如果我将代码更改为不使用数组,而是使用如下硬整数:

$revenuesQuery = $revenues->find('all', [
        'conditions' => [
            'device_id' => 3,
            'date' => date('Y-m-d')
        ]
    ]);
它工作正常吗

以下是我的已调试查询:

'(help)' => 'This is a Query object, to get the results execute or iterate it.',
'sql' => 'SELECT Revenues.id AS `Revenues__id`, Revenues.device_id AS `Revenues__device_id`, Revenues.revenue AS `Revenues__revenue`, Revenues.date AS `Revenues__date` FROM revenues Revenues WHERE (device_id = :c0 AND date = :c1)',
'params' => [
    ':c0' => [
        'value' => [
            (int) 0 => (int) 3,
            (int) 1 => (int) 4
        ],
        'type' => 'integer',
        'placeholder' => 'c0'
    ],
    ':c1' => [
        'value' => '2017-12-17',
        'type' => 'date',
        'placeholder' => 'c1'
    ]
]

提前谢谢。

您要找的东西叫做

将中的
一词添加到字段名称的末尾

$revenuesQuery = $revenues->find('all', [
    'conditions' => [
        'device_id IN' => [1, 3, 5],
        'date' => date('Y-m-d')
    ]
]);
或者,查询表达式生成器更详细,这是我在CakePHP中创建查询的首选方法

$q = $revenues->query();
$revenuesQuery = $revenues->find('all')
    ->where([
        $q->newExp()->in('device_id', [1, 3, 5]),
        $q->newExp()->eq('date', $q->func()->now())
    ]);

请看Cake 3的查询生成器:

您可以执行以下操作:

   $devIds = [1,2,3];
   $revenuesQuery = $this->revenues->find()
            ->where(function (QueryExpression $exp) use ($devIds) {
                return $exp
                        ->in('device_id', $devIds)
                        ->eq('date', q->func()->now() );
            }); 

第二种选择更符合Cake3的要点。第一个解决方案要求记住Sql,这与ORM概念相矛盾。