Главная/Статьи/YII2: Связь между моделями
Yii2

YII2: Связь между моделями

Рассмотрим создание связей между моделями в YII2 на примере блога. У нас есть два CRUD: один для постов, другой для категорий. Поле категории в посте хранит числовой ID из таблицы категорий.

Форма — выпадающий список вместо поля ввода

Сначала подключим нужные классы в файле формы:

use yii\\helpers\\ArrayHelper;
use app\\models\\Tags;

Затем заменим автоматически сгенерированное поле на выпадающий список:

field($model, 'tags')->dropDownList(
  ArrayHelper::map(Tags::find()->all(), 'tid', 'title')
) ?>

Определение связи в модели

В модели поста определяем связь:

public function getTagz()
{
  return $this->hasOne(Tags::className(), ['tid' => 'tags']);
}

GridView — отображение названия вместо ID

Изменяем столбец в таблице GridView для отображения названий категорий вместо числовых ID:

[
  'attribute' => 'tags',
  'value' => 'tagz.title',
  'filter' => $tagz,
],

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