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

У меня относительно простая установка с использованием приложения Yii, но я пытаюсь получить доступ к данным между таблицами в следующем сценарии:

Два стола:

payments_info (id, data): где id — первичный ключ автоинкремента, имя класса модели PaymentInfo

payments (id, payment_id, other_columns): здесь id снова является первичным ключом, а payment_id — внешним ключом, указывающим на одну из записей в таблице payment_info, имя класса модели Payment

В массиве отношений внутри класса Модель оплаты у меня есть следующее:

'payment_id'=>array(self::BELONGS_TO, 'PaymentInfo', 'id'),

Я ничего не добавил в отношения модели PaymentInfo, поскольку технически он ничего не знает о другой таблице.

У меня есть контроллер, создающий CActiveDataProvider из модели платежей и показывающий все записи. В нем я хотел бы иметь поле, в котором будет отображаться столбец «данные» из модели PaymentInfo, но я не знаю, как туда добраться.

В cdbcriteria в контроллере, который использовался для создания провайдера данных, я пытался использовать:

$criteria->with = array('payment_id');

И затем в представлении, внутри переменной столбцов CGridView, которая отображает поставщика данных, который я добавил:

array(
'name'=>'payment_id',
'visible'=>true,
'value'=> $data->payment_id->data,
),

Я также пробовал разные комбинации добавления ‘или’ вокруг переменной $ data, но пока безуспешно. Мне удается отобразить правильный payment_id, но я не могу понять, как отобразить значение ‘data’ из другой таблицы. Любые советы приветствуются!

0

Решение

Вы можете использовать метод ниже, чтобы получить данные из другой реляционной таблицы в YII

Модель оплаты в функции отношения

public function relations()
{
return array(
'pinfos'   => array(self::BELONGS_TO, 'PaymentInfo', 'payment_id'),
);
}

Модель PaymentInfo в функции отношения

    public function relations()
{
return array(
'payments'   => array(self::HAS_MANY, 'Payment', 'payment_id'),
);
}

А в zii.widgets.grid.CGridView это

    <?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'post-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'pinfos.data',
/* other fields goes here*/
array(
'class'=>'CButtonColumn',
),
),
)); ?>

Больше не нужно ничего делать.

0

Другие решения

Других решений пока нет …