【问题标题】:CakePHP - Find conditions for related modelCakePHP - 查找相关模型的条件
【发布时间】:2011-10-05 15:52:03
【问题描述】:

我有 SubjectGroup,它有很多主题。

class SubjectGroup extends AppModel {

    public $hasMany = array(
        'Subject' => array('order' => 'Subject.name')
    );

}

class Subject extends AppModel {

    public $belongsTo = array('SubjectGroup');

}

我想获取所有 SubjectGroups,并递归检索它们的 Subjects,但只检索状态为 2 的 Subjects。我不知道该怎么做。

$subjectGroups = $this->SubjectGroup->find('all', array(
    'conditions' => array('Subject.status !=' => 2),
    'order' => 'SubjectGroup.name'
));

警告 (512):SQL 错误:1054:“where 子句”中的未知列“Subject.status”

注意:我读过我可以在模型关系定义中添加一个条件数组,但我不希望关系总是使用条件。有时我只想检索状态为 2 的 SubjectGroups 和 Subjects,有时我想检索所有 Subjects 的 SubjectGroups,不管它们的状态如何。

进展

在 Ross 的帮助下,我现在正在尝试使用 Containable 行为。到目前为止我有这个:

$this->SubjectGroup->find('all', array(
    'contain' => 'Subject.status != 2',
    'order' => 'SubjectGroup.name'
));

没有错误,但它返回所有主题,即使是状态 = 2 的主题。

【问题讨论】:

标签: cakephp


【解决方案1】:

您正在做的是让 Cake 在 SubjectGroup 表中查找字段 status。它不存在。

您真正想做的是使用可包含的行为,并以这种方式访问​​status 字段。

试试这个:

$this->SubjectGroup->Behaviors->attach('Containable');

$subjectGroups = $this->SubjectGroup->find('all', array(
    'contain'=>array('Subject'=>array(
                             'conditions' => array('Subject.status !=' => 2))
                    ),
    'order' => 'SubjectGroup.name'
    ));

【讨论】:

  • 是的,Containable 看起来像我需要的,但您的代码不起作用。根据手册,它有一个$this->Post->find('all', array('contain' => 'Comment.author = "Daniel"'));的例子,所以我尝试将它修改为$this->SubjectGroup->find('all', array('contain' => 'Subject.status != 2', 'order' => 'SubjectGroup.name'));,但这不起作用。
  • 你能发布你的联想吗?什么不起作用?错误,意外数据?
  • 查看我更新的主帖。没有错误,它只返回所有主题,因此可包含的行为似乎没有做任何事情。
  • 这个答案不应该被接受,因为它返回所有的主题组,但它们中的每一个只包括状态为 != 2 的主题。
  • 是的!我同意 Vanja D.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
相关资源
最近更新 更多