1

假设我有ModelA一个ModelBCakePHP 应用程序。ModelA和之间的关联类型ModelB如下:

ModelA hasOne ModelB
ModelB belongsTo ModelB

我想要一个 find() 查询ModelA,只有当number字段ModelB不为空时才返回一些东西(否则返回空)。我尝试了这样的事情,但即使numberModelB 的字段为空,我的 ModelA 和 ModelB 仍会在查询结果中返回:

$this->ModelA->find('first', array(
    'contain' => array(
        'Model B' => array(
            'conditions' => array(
                 'ModelB.number IS NOT NULL'
            )
        )
    ), 
    'conditions' => array(
        'ModelA.id' => 13
    )
));

正如您在上面看到的,我将条件放在containon 中ModelB。我希望我在这里想要做什么已经足够清楚了。有人可以帮忙吗?

谢谢

4

1 回答 1

1

您应该始终检查 CakePHP 执行的查询。通过启用调试级别 2,SQL 语句应该在您的页面上可见。

在你的情况下,我怀疑NOT NULL条件没有正确指定。大概应该是这样的;

$this->ModelA->find('first', array(
    'contain' => array(
        'Model B' => array(
            'conditions' => array(
                 'NOT' => array(
                     'ModelB.number' => NULL
                 )
            )
        )
    ), 
    'conditions' => array(
        'ModelA.id' => 13
    )
));
于 2013-06-07T22:29:54.630 回答