Нумерация нескольких моделей в CakePHP 1.2.5 - PullRequest
3 голосов
/ 24 декабря 2009

Я работаю над представлением блога, в котором сообщения, комментарии и загруженные элементы мультимедиа объединяются в одну большую сетку. Я настроил отдельные модели в CakePHP и ассоциации, некоторые из которых следующие:

Comment BelongsTo Post or Media
Post HasMany Media

Я пытаюсь отсортировать все три модели (Comment, Media, Post) в один большой массив данных, который затем можно разбить на страницы.

У меня уже есть «созданное» поле даты и времени в базе данных. Я понимаю, как разбить на страницы каждый из отдельных вызовов базы данных, используя CakePHP PaginationHelper. Я также объединил массивы. Тем не менее, смешивание отдельных вызовов базы данных и последующее объединение массивов, кажется, нарушают нумерацию страниц, поскольку она не работает с PaginationHelper (как я понимаю).

Есть ли у вас какие-либо предложения для этого?

Кроме того, я хотел бы уменьшить количество обращений к базе данных, поэтому любые предложения в этом направлении были бы полезны. Спасибо!

~ Andrew

1 Ответ

5 голосов
/ 28 декабря 2009

Похоже, вы хотите использовать какой-то выбор UNION относительно этих 3 моделей. Этого можно добиться, переопределив стандартные методы paginate и paginateCount модели. Основы описаны в Поваренной книге (http://book.cakephp.org/view/249/Custom-Query-Pagination).

Похоже, вы захотите заменить поиск (все) на поиск ('запрос') следующим образом:

/**
 * Overridden paginate method - group by week, away_team_id and home_team_id
 */
function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
    $recursive = -1;
    $group = $fields = array('week', 'away_team_id', 'home_team_id');
    return $this->query('SELECT field1, field2 FROM table1 
                         UNION SELECT field1, field2 FROM table2 
                         LIMIT '.(($page-1)*$limit).', '.$limit);
}
...