CakePHP - Найти условия для связанной модели - PullRequest
1 голос
/ 05 октября 2011

У меня есть SubjectGroup, которая имеет много тем.

class SubjectGroup extends AppModel {

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

}

class Subject extends AppModel {

    public $belongsTo = array('SubjectGroup');

}

Я хочу получить все SubjectGroups и рекурсивно получить их Предметы, но только Предметы, имеющие статус 2. Я не могу понять, как это сделать.

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

Предупреждение (512): ошибка SQL: 1054: неизвестный столбец «Subject.status» в «предложении where»

Примечание: я прочитал, что могу добавить массив условий в определение отношения модели, но я не хочу, чтобы отношение всегда использовало условие. Иногда я захочу просто получить SubjectGroups и Subjects со статусом 2, а иногда SubjectGroups со всеми Subjects, независимо от их статуса.

ПРОГРЕСС

С некоторой помощью Росса я сейчас пытаюсь использовать поведение Containable. У меня есть это до сих пор:

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

Нет ошибок, но он возвращает все темы, даже те, которые имеют статус = 2.

1 Ответ

2 голосов
/ 05 октября 2011

То, что вы делаете, просит Cake найти поле status в таблице SubjectGroup. Его не существует.

Что вы действительно хотите сделать, так это использовать сдерживаемое поведение и таким образом получить доступ к полю status.

Попробуйте это:

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

$subjectGroups = $this->SubjectGroup->find('all', array(
    'contain'=>array('Subject'=>array(
                             'conditions' => array('Subject.status !=' => 2))
                    ),
    'order' => 'SubjectGroup.name'
    ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...