Я думаю, вам нужно объединить модели, используя Relational Active Record .
В процессе самообучения, за которым я следую, надеюсь, у меня скоро будет пример для публикации здесь ...
РЕДАКТИРОВАТЬ наконец, я разработал пример. Я (возможно) нашел ошибку в Yii, так что это простая задача, требующая больше времени, чем необходимо ...
У меня есть две модели, User e Persona, полученные из gii, ранее не связанные. Затем я добавляю Персона к Пользователю в качестве необязательного атрибута: в User.php
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'persona' => array(self::HAS_ONE,'Persona','id')
);
}
тогда модель для пользователя автоматически отображает выбранные поля из Persona при привязке к CGridView:
<hr><?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => new CActiveDataProvider('User'),
'columns' => array(
'username',
'password',
'email',
'persona.indirizzo'
),
));
?>
Ошибка, которую я обнаружил (возможно, нужно исследовать больше): моя модель Persona имеет атрибут с акцентированным символом в имени, и если я использую его вместо этого, я получаю ошибку: то есть, если
'columns' => array(
'username',
'password',
'email',
'persona.identità'
),
тогда страница не может быть создана:
The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.
/home/carlo/public/yii-1.1.8.r3324/framework/zii/widgets/grid/CGridView.php(332)
320 foreach($this->columns as $column)
321 $column->init();
322 }
323
324 /**
325 * Creates a {@link CDataColumn} based on a shortcut column specification string.
326 * @param string $text the column specification string
327 * @return CDataColumn the column instance
328 */
329 protected function createDataColumn($text)
330 {
331 if(!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/',$text,$matches))
332 throw new CException(Yii::t('zii','The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.'));
333 $column=new CDataColumn($this);
334 $column->name=$matches[1];
Я думаю, что это регулярное выражение не соответствует ...