Отображение данных взаимосвязанных таблиц в Yii2

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

И так предположим у нас есть 3 таблицы, которые связаны между собой (как их создать можно посмотреть здесь и как установить сам фремворк тут).

Screen Shot 2016-06-05 at 2.08.19 AM

И мы хотим вывести на странице таблицу с данными из основной таблицы (orders), подставив вместо некоторых полей значения из других таблиц (products, customers), которые связаны с нашими значениями.

Для создания контроллеров, представлений и моделей для наших таблиц мы воспользуемся замечательным инструментом фреймворка Yii2 под название Gii. Для этого перейдем по ссылке

результатом должно быть следующее

Screen Shot 2016-05-24 at 11.58.37 PM

если же у вас не получилось зайти, то проверьте путь ссылки. Данная ссылка для vagrant scothchbox и при использовании другого севера ссылка может отличатся. Так же необходимо проверить включен ли вагрант и доступ к гии. Как включить доступ можно прочитать тут.

Начнем с создания модели. Жмем кнопку старт под model generator и вводим название таблицы в поле table name – orders. В соответствии с названием поле model class автоматически предложит такое же название, только с большой буквы. Нас это устраивает.

Screen Shot 2016-06-06 at 5.38.50 PM

Далее жмем кнопки preview – generate. И получаем примерно такой ответ

Таким образом создаем модели для оставшихся двух таблиц customers и products.

Далее нам необходимо создать контроллеры и представления. Жмем на кнопку crud generator (CRUD – create, read, update, delete). И вводим названия наших таблиц с большой буквы в необходимые поля с следующими путями

Screen Shot 2016-06-06 at 5.05.33 PM

снова жмем кнопки preview – generate. Такие же процедуры проделываем для оставшихся двух названий наших тестовых таблиц.

Проверим наличие появившихся в проекте новых файлов и их работоспособность. Перейдем по ссылке

и видим результат работы гии

Screen Shot 2016-06-06 at 5.44.57 PM

все отлично кроме того, что мы хотим не видеть поля ID и вместо полей Products ID и Customers ID мы хотим видеть не номер идентификатора, а его значение с связанной с ним таблицы.

Для доработки откроем файл

и для начала закомментируем или удалим строчку с ‘id’ в GridView. Проверим результат отображения – поле исчезло. Отлично. Далее создадим для теста по 4 продукта и пользователя. Для этого в ссылке, по которой мы заходили, меняем orders на products, customers

и в каждом вью нажав кнопку create создаем тестовые данные.

У меня тестовые данные будут такие

Screen Shot 2016-06-07 at 12.29.35 AM

Screen Shot 2016-06-07 at 12.36.24 AM

Screen Shot 2016-06-07 at 12.37.47 AM

В отображениях Customers, Products уберем поля id и #.  Для этого откроем файлы

и убираем/комментируем поля

Теперь они более читабельны. А вот непонятные цифры в отображении orders – не очень.

Откроем его

и заменим строчки

на

соответственно.

Ну с значением ‘attribute’ более менее понятно, туда идут заменяемые поля. А как формируется ‘value’?

Для того, что бы стало понятнее его происхождение, откроем файл

Наш добрый помошник гии, генерируя подели, на основании взаимосвязей таблиц добавили нам парочку гетеров

эти методы, помогают нам уточнять значение соответствующее нашему айдишнику в связанной таблице. Соответственно значение ‘value’ формируется следующим способом:

название гетера (getProducts например), убираем служебную приставку “get” и берем остаток с маленькой буквы. Затем через точку пишем с название поля связанной таблице (name для продуктс например).

В резултате на код выглядит примерно так

а отображение будет выглядеть

Screen Shot 2016-06-07 at 10.33.30 AM

вместо айдишников мы видим их значения с связанных таблиц. Не плохо.

Leave a Reply