[英]Yii relations trouble when trying to display CGridView from 2 models
描述表格的圖片-> http://i.stack.imgur.com/ki2YP.jpg
每個表都是一個模型。
通過CGridView顯示的主要模型是“ RegularTask”。
現在,我需要它在同一行中顯示“ YearlyTask”中的字段。
兩個表中的“ hp_id ”和“ up_id ”均為FK(外鍵)。
我試圖像這樣在RegularTask模型中設置Relations():
'arp' => array(self::BELONGS_TO, 'YearlyTask', 'hp_id, up_id'),
然后,我嘗試通過使用“ arp.is_sent”和“ arp.is_reported”顯示YearlyTask的“ is_sent”和“ is_reported”字段,但沒有任何顯示(甚至沒有錯誤)。 而來自RegularTask的數據則正常顯示。
我究竟做錯了什么?
這是dataprovider的摘錄。
<?php
$dataProvider=new CActiveDataProvider('RegularTask', array(
'criteria'=>array(
'condition'=>'t.id_id=' . $model->id,
'order'=>'t.created DESC',
'with'=>array('arp'),
),
'pagination'=>array(
'pageSize'=>10,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'comment',
'arp.is_sent'
),
));
?>
一個表中的外鍵必須是鏈接表中的主鍵。 如果您查看由Yii用您的結構創建的SQL語句,將會看到類似以下內容(簡化):
SELECT `t`.*, `arp`.* FROM `RegularTask` `t` LEFT OUTER JOIN `YearlyTask` `arp` ON (`t`.`hp_id`=`arp`.`id`) AND (`t`.`up_id`=`arp`.`id`)
如您所見,查找的是這兩個RegularTask
。 hp_id
和RegularTask
。 up_id
具有相同的值YearlyTask
。 id
不正確。 您有幾種解決方案。 其中之一是在RegularTask中創建新列,例如yt_id
,這將是YearlyTask
外鍵。 id
,我認為這是最好的解決方案。
否則,您可以刪除RegularTask
表中的主鍵列id
,並將hp_id
和up_id
為復雜的主鍵。 在這種情況下,您可以使用以前嘗試過的方式,但是由於我不知道您的完整數據庫結構,因此我不能保證這是一個很好的解決方案。
您是否嘗試過使用這種樣式:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'comment',
array(
'header'=>'Sent',
'type'=>'raw',
'value'=>'$data->arp->is_sent',
)
),
));
也許不是最優雅的方式,但可能會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.