CakePHP-查找未返回预期结果的条件

CakePHP-查找未返回预期结果的条件,cakephp,Cakephp,我有一个发票模型,它有两个字段确定其处理状态。一个是技师id,一个是处理日期。它们都用于稍有不同的事情,每个都可以为null 我想检索所有那些处理日期为空且技师id为空或与当前用户id相同的发票 我以为我知道我在做什么,但很明显我有周五的事要做,因为我不能让它工作。以下是我目前的情况: $conditions = array( 'Invoice.date_processed' => null, 'Invoice.technic

我有一个发票模型,它有两个字段确定其处理状态。一个是技师id,一个是处理日期。它们都用于稍有不同的事情,每个都可以为null

我想检索所有那些处理日期为空且技师id为空或与当前用户id相同的发票

我以为我知道我在做什么,但很明显我有周五的事要做,因为我不能让它工作。以下是我目前的情况:

        $conditions = array(
            'Invoice.date_processed' => null,
            'Invoice.technician_id' => array(null, $user_id)
            )
    );
我也试过:

    $conditions = array(
            'Invoice.date_processed' => null,
            'OR' => array(
                'Invoice.technician_id' => null,
                'Invoice.technician_id' => $user_id
            )
    );
但是,这两种方法都只返回技师id与用户id匹配的发票,而不返回技师id为空的发票(正确过滤了“处理日期”字段)


有人能告诉我我做错了什么吗?

我认为解决办法可能是:

$conditions = array(
  'OR' =>
        array(
               array('AND' => array(
                              array('Invoice.date_processed' => null),
                              array('Invoice.technician_id' => null)
                        )),
               array('AND' => array(
                              array('Invoice.date_processed' => null),
                              array('Invoice.technician_id' => $user_id)
                        ))
             )
);

第一个“or”语句不起作用的原因是数组在php中的工作方式,定义一个键两次会覆盖第一个键

所以当你这么做的时候

$conditions = array(
        'Invoice.date_processed' => null,
        'OR' => array(
            'Invoice.technician_id' => null,
            'Invoice.technician_id' => $user_id
        )
);
更像是这样说的

$conditions = array(
        'Invoice.date_processed' => null,
        'OR' => array(
            'Invoice.technician_id' => $user_id
        )
);
在cakephp中执行'OR'语句而不使用过多的'AND'语句的正确方法是

$conditions = array(
        'Invoice.date_processed' => null,
        'OR' => array(
            'Invoice.technician_id' => array(null, $user_id)
        )
);

首先创建条件,然后将其分配给查找。请记住,您将需要删除空的条件,这是一个难以读取的缩进。。。您阅读过如何定义
条件吗?您已经使查找条件更易于阅读,并在代码中将它们分离出来。是的,我读过文档,以前也做过类似的事情——这次似乎没有达到预期的效果!非常感谢。这非常有效。不知道为什么我没想到。谢谢你-我明白你的意思。知道有帮助。