Yii – Relational Active Record – Поиск и вывод результатов с обоих таблиц

Для работы с двумя разными таблицами в одной Active Record (AR) используя стандартные методы yii, необходимо сделать следующее:
1. Настроить связи между таблицами в БД по внешнему ключу.
2. Для каждой таблицы сделать AR класс-модель (Проще через Gii).

Для реализации поиска и вывода данных через стандартный виджет CGridView понадобится один из AR классов, который будет основным, через него будет работать view с таблицей CGridView.

Назовем этот основной класс AR Users
А второй класс AR – Comments

Если БД настроена верно, то Gii в обоих классах автоматически пропишет связи между таблицами:

В Users он будет выглядеть так:

'coms' – это в дальнейшем будет использоваться как путеводитель к данным второй таблицы из класса Comments. Но само название можно выбрать любое.
'Comments' – это имя класса второй AR с таблицей comments
'comid' – имя связи между ключами в БД, ставится автоматически, и всегда одинаково в обоих классах.

В методе public function search() класса Users нужно прописать следующее:

}

Таким образом мы добавили в поиск данных для CGridView дополнительный параметр header из второй таблицы. Но, чтобы работала сортировка, необходимо в AR Users прописать свойство header – которое есть во второй AR (колонка таблицы второй AR):

Данные методы автоматически добавят свойство header в класс AR Users

Примечание
Если в связующей таблице установлены INDEX, то в модели необходимо прописать эти индексы.
Например:
В модели прописаны связи

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

Просмотров : 5422
Запись опубликована в рубрике Yii с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *