CakePHP - Условное поведение не работает в find () - PullRequest
0 голосов
/ 06 октября 2011

У меня есть SubjectGroup, у которой есть много Subject.

class SubjectGroup extends AppModel {

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

}

class Subject extends AppModel {

    public $belongsTo = array('SubjectGroup');

}

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

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

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

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

Ну, я наконец обнаружил две проблемы.Я пытался добавить определение $actsAs к контроллеру, чтобы ввести поведение.Я полностью забыл, что это не модель.Вы должны ввести поведение в действие контроллера.

class SubjectGroupsController extends AppController {

    public function index()  {

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

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

}

Но, в любом случае, условие работает только в том случае, если я использую очень простой синтаксис:

'contain' => 'Subject.status != 2'

Мне кажется, что ничего более сложного не работает:

// DOES NOT WORK
'contain' => array(
    'Subject' => array(
        'conditions' => array('NOT' => array('Subject.status' => 2)),
    ),
)
0 голосов
/ 06 октября 2011

Я думаю, вам нужно установить условие для Субъектов более явно.

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