2010-11-23 2 views
4

Схема:Как получить связанные значения в Yii?

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

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

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

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

+0

4 upvotes для ответа, 0 для вопроса? Веселая! Я обновляю оба. Очень полезно. – Smandoli 2012-08-25 20:38:47

ответ

8

Угадайте, что я отвечу сам.

Вопрос 1

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

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

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

'Status' 

в

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

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

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

$data->Status 

в

$data->RelationName->Name 

Чтобы использовать соответствующую величину в вид с Admin, в виджете вызова CGridView, в массиве колонок, замените сказать

'Status' 

с

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

(обратите внимание на использование переменных $ data, а не на $ model или $ dataProvider). Тем не менее, пытаясь выяснить, как сортировать и фильтровать ...

Вопрос 2

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

изменения

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

в

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

эль главный, вы джентльмен и ученый.

+2

Я нашел, что с `CDetailView` этот синтаксис работал:` RelationName.Name`. Получил мою помощь от http://www.yiichina.net/forum/index.php/topic/34124-cgridview-get-relationship-value/ – Smandoli 2012-08-25 20:55:14

Смежные вопросы