CakePHP 2.0 нумерация страниц и сумма на hasMany-ассоциированной модели - PullRequest
0 голосов
/ 04 марта 2012
Project hasMany Comments
Payment (id, project_id, value, date)

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

Я нашел здесь несколько похожих проблем, но ни одна из них не касается разбиения на страницы.

Мое текущее (неправильное) решение:

    $this->paginate = array('Project' => array(
            'conditions' => array('Project.archived =' => $archive),
            'order' => 'Project.start_date DESC',
            'contain' => array(
                    'Payment' => array(
                            'fields' => array('SUM(Payment.value) as Project__value_sum'),
                            'group'  => array('Payment.project_id'),
                            )
                        )
        ));
    $data = $this->paginate('Project');
    $this->set('projects', $data);
    $this->set('archive', $archive);

1 Ответ

0 голосов
/ 04 марта 2012

Похоже, вы, вероятно, захотите сделать afterSave на модели Payment.

В функции afterSave вы запускаете MySQL, который суммирует платежи (используя MySQL SUM()) для связанного проекта и сохраните его в Project.payment_total.

Затем вы можете легко отсортировать по этому полю, и это избавит вас от необходимости запускать сложный MySQL на каждой странице, так как он будет толькозапускать при необходимости (т.е. при наличии нового или измененного платежа)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...