Как получить связанные значения в Yii? - PullRequest
4 голосов
/ 24 ноября 2010

Схема:

CITY
ID (int)
Name (string)
Status (int)

CITY_STATUS
ID (int)
Name (string)
  1. Когда я отображаю город (в режиме просмотра), я хочу отобразить соответствующее значение CITY_STATUS.Name вместо значения CITY.Status

  2. Когда я добавляю или обновляю город, я хочу отобразить раскрывающийся список всех CITY_STATUS.Names в раскрывающемся списке

Как мне это сделать в Yii?

1 Ответ

8 голосов
/ 24 ноября 2010

Думаю, я сам на это отвечу.

Вопрос 1

Отношения проще, если вы сначала настроили внешний ключ в своей базе данных. Для этого вам нужно использовать MySQL (не SQLite) с движком InnoDB (не MyISAM), а для рассматриваемого поля нужен индекс. Затем Gii автоматически установит для вас функцию отношений. В противном случае вам придется делать это вручную в функции Relations () рассматриваемой модели.

Чтобы использовать связанное значение в представлении:

В защищенных / views / [имя модели] /view.php в массиве атрибутов CDetailView измените

'Status'

до

array('label'=>'Status', 'value'=>$model->RelationName->Name)

где RelationName - имя отношения

Чтобы использовать связанное значение в представлении индекса, измените protected / views / [имя модели] / _ view.php (обратите внимание на подчеркивание), например, в этом случае вы должны изменить

$data->Status

до

$data->RelationName->Name

Чтобы использовать связанное значение в представлении администратора, в вызове виджета CGridView в массиве столбцов замените, скажем,

'Status'

с

array('name'=>'Status', 'header'=>'Status', 'value'=>'$data->RelationName->Name')

(обратите внимание на использование переменной $ data, а не скажем $ model или $ dataProvider). Все еще пытаюсь понять, как сортировать и фильтровать ...

Вопрос 2

Чтобы использовать выпадающее меню, в protected / views / [имя модели] / _ form.php:

изменение

<?php echo $form->textField($model,'Status'); ?>

до

<?php echo $form->dropDownList($model,'Status', CHtml::listData(Status::model()->findAll(), 'ID', 'Name')); ?>

Эль вождь, вы джентльмен и ученый.

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