2

テーブルを説明する画像 -> 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 からのデータは正常に表示されます。

私は何を間違っていますか?

これは、データプロバイダーからのスニペットです..

<?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'
    ),
));
?>
4

2 に答える 2

2

1 つのテーブルの外部キーは、リンクされたテーブルの主キーである必要があります。あなたの構造で 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_idRegularTaskup_idと同じ値を持っていますYearlyTaskidこれは正しくありません。いくつかの解決策があります。そのうちの 1 つは、RegularTask のようなyt_id外部キーとなる新しい列を作成することですYearlyTaskid私の意見では、それが最善の解決策です。

idそれ以外の場合は、RegularTaskテーブルの主キー列を削除してhp_idup_id複雑な主キーとして作成できます。この場合、以前に試した方法を使用できますが、完全なデータベース構造がわからないため、それが良い解決策であるとは保証できません。

于 2011-09-30T14:54:17.660 に答える
-1

このスタイルを使用してみましたか:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        'comment',
        array(
            'header'=>'Sent',
            'type'=>'raw',
            'value'=>'$data->arp->is_sent',
        )
    ),
));

おそらく最もエレガントな方法ではありませんが、役立つかもしれません

于 2011-09-30T10:20:56.760 に答える