cakephp或条件

cakephp或条件,php,cakephp,Php,Cakephp,最初是关于cakephp问答的,但我会把它放在这里,希望得到一些答案 我有一些公司的默认状态为0,但有时状态更高。现在,如果存在,我想使用high状态,如果不存在,则恢复为0。我尝试了许多不同的方法,但我总是只得到状态为0的方法,或者得到状态为我想要的方法,如果存在状态,就不给我状态,如果没有状态,就不给我状态 仅提供我指定的状态,而不提供状态为0的状态: 'Company' => array ( 'conditions' => array ( 'OR' =

最初是关于cakephp问答的,但我会把它放在这里,希望得到一些答案

我有一些公司的默认状态为0,但有时状态更高。现在,如果存在,我想使用high状态,如果不存在,则恢复为0。我尝试了许多不同的方法,但我总是只得到状态为0的方法,或者得到状态为我想要的方法,如果存在状态,就不给我状态,如果没有状态,就不给我状态

仅提供我指定的状态,而不提供状态为0的状态:

'Company' => array (
    'conditions' =>  array (
        'OR' => array(
            'Company.status' => 0,
            'Company.status' => $status,
        )

    )
)
仅为我提供0的状态:

'Company' => array (
    'conditions' =>  array (
        'OR' => array(
            'Company.status' => $status,
            'Company.status' => 0
        )
    )
)
状态定义和检索代码中的数据:

function getCountry($id = null, $status = null) {
    // Bunch of code for retrieving country with $id and all it's companies etc, all with status 0.
    $status_less_companies = $this->Country->find...

    if ($status) {
        $status_companies = $this->Country->find('first', array(
            'conditions' => array(
                'Country.id' => $id
            ),
            'contain' => array(
                'Product' => array (
                    'Company' => array (
                        'conditions' =>  array (
                            'OR' => array(
                                'Company.status' => $status,
                                'Company.status' => 0
                            )
                        )
                    )
                )
            )
        )
    }

    // Mergin $status_less_companies and $status_companies and returning data to flex application.
}
我为这个问题更改了模型的名称,只是为了让问题更有意义。当我告诉人们我使用cakephp开发flex应用程序时,人们通常会感到害怕。我想这个问题的逻辑是没有道理的,但相信我,在我的应用程序中它是有道理的

谢谢

试试看

'Company' => array (
    'conditions' =>  array (
        'OR' => array(
            array('Company.status' => 0),
            array('Company.status' => $status),
        )

    )
)
在烹饪书中,如果or条件属于同一字段,则将其包装在数组中

我不确定是否理解您期望的结果。如果要检索状态为0的所有记录,再加上状态为3的记录,可以使用“IN”而不是“OR”

在Cake中,您可以这样写:

$status = 3;
$conditions = array('Company.status' => array(0, $status));

您还可以使用以下方法获取记录: 将值放入数组中 e、 g.$arr=数组(1,2)


我希望您能找到答案。

这给了我与第二个示例相同的结果,只显示状态为0的每个公司,而不使用定义的状态(如果存在)。您能告诉我们$status是如何声明的,以及数据库中有哪些值的示例吗?用一些附加信息更新了我的问题,这有帮助吗?很难说,我建议您获取它输出的原始SQL,以帮助您进一步调试它。您可以通过DataSource::\u queriesLog获得,以下是一些使用该响应中的函数getLastQuery()时遇到一些问题的说明,它们似乎没有提供我想要的模型的最新查询:正在处理此问题。您可以附加SQL转储吗?(在您的视图中使用$this->Element('sql_dump'),确保Configure::debug>0)。这不起作用,因为我正在从flex应用程序中调用cake中的函数。查询将不会显示在我的视图中。非常有用,谢谢!这个答案胜过维格朗兹。虽然这两种方法都有效,但在中使用比使用或更有效,因此整个应用程序变得更快。在OPs示例中,此方法可能更好,但在跨越多个字段的
情况下,@Vigrond的答案对这两种情况都有效。我希望我能给你更多的支持。我被困在这上面太久了。
 $res = $this->Model->find('all', array(                      
        'conditions' =>array('Model.filedname'=>$arr),
        'model.id' => 'desc'
  ));