Задание критериев записи для более чем одной модели за один вызов нумерации страниц - PullRequest
0 голосов
/ 26 июля 2010

Я застрял на нумерации страниц в CakePHP 1.3. Я пытаюсь разбить записи feePayment на основании определенных критериев.

feePayments принадлежит Студентам, которые, в свою очередь, принадлежат YearGroups.

Я хочу разбить «неоплаченные» комиссионные за каждую группу за год. Проблема, с которой я столкнулся, заключается в том, что SQL-запрос, похоже, учитывает только те условия, которые я указал для модели FeePayment, и игнорирует критерии YearGroup, поэтому возвращаются только просроченные неоплаченные записи независимо от указанной группы лет.

Вот мой код:

function unpaidClass($id) {
    $this->paginate = array(
    'FeePayment' => array ('recursive' => 1, 'conditions' => array('FeePayment.status' => 'Unpaid', 'FeePayment.due_date <= ' => date("Y-m-d"))),
    'YearGroup' => array ('recursive' => 1, 'conditions' => array('YearGroup.school_year' => $id))
    );

    $this->set('feePayments', $this->paginate());
}

Надеюсь, что это имеет смысл, ценю любую помощь.

Спасибо

Sid.

Ответы [ 2 ]

0 голосов
/ 28 июля 2010

После долгих поисков в сети и чтения документации CakePHP вот решение, которое я нашел:

    function unpaidClass($id) {
    $this->FeePayment->unbindModel(array(
        'belongsTo' => array('Student')
    ), $reset = 0);

    $this->FeePayment->bindModel(array(
        'belongsTo' => array(
            'Student' => array(
                'foreignKey' => false,
                'conditions' => array('Student.id = FeePayment.student_id')
            ),
            'YearGroup' => array(
                'foreignKey' => false,
                'conditions' => array('YearGroup.id = Student.year_group_id')
            )
        )
    ), $reset = 0);

    $this->paginate = array(
        'contain' => array('Student','YearGroup'),
        'conditions' => array('YearGroup.school_year' => $id, 
            'FeePayment.status' => 'Unpaid',
            'FeePayment.due_date <= ' => date("Y-m-d")));

    $this->set('feePayments', $this->paginate());
}
0 голосов
/ 26 июля 2010

Вам следует рассмотреть возможность использования Containable поведения . Такое поведение позволяет вам группировать необходимые данные, не опираясь на «рекурсивность» вашего запроса. Вы можете помещать условия в содержащиеся в них данные аналогично тому, как вы это делаете в своих запросах, и это более постоянный способ структурировать данные в вашем приложении, вместо того, чтобы задавать условия снова и снова в каждом запросе.

Paginate должен автоматически подобрать эти ассоциации, когда вы Paginate вашей основной модели. Вот пример того, что я имею в виду здесь: http://cakephp.1045679.n5.nabble.com/Paginate-with-Containable-td1300971.html#a1300971

Это должно облегчить вашу задачу.

...