簡體   English   中英

嘗試從2個模型顯示CGridView時Yii關系出現問題

[英]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_idRegularTask up_id具有相同的值YearlyTask id不正確。 您有幾種解決方案。 其中之一是在RegularTask中創建新列,例如yt_id ,這將是YearlyTask外鍵。 id ,我認為這是最好的解決方案。

否則,您可以刪除RegularTask表中的主鍵列id ,並將hp_idup_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM