0

3 つ以上のテーブル間の関係を構築する必要があるという要件があります。Message、Flat、Person、Mapping テーブルの 4 つのテーブルがあります。現在、以下のテーブルには次のフィールドがあります。

メッセージ:

`Id` int(11) NOT NULL AUTO_INCREMENT,                
`Mapid` int(11) DEFAULT NULL,                     
PRIMARY KEY (`Id`),                                
KEY `FK41715B218022FC0` (`MapId`)                    

マッピング

`Id` int(11) NOT NULL AUTO_INCREMENT,  
`FlatId` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`),  
KEY `FKE2B3C68A24F94F50` (`FlatId`),

平らな

`Id` int(11) NOT NULL AUTO_INCREMENT,               
`PersonId` int(11) DEFAULT NULL,                    
PRIMARY KEY (`Id`),                                
  KEY `FK2FFF79122B94A6` (`PersonId`),              

`Id` int(11) NOT NULL AUTO_INCREMENT,  
`Name` varchar(255) DEFAULT NULL,  
 `FlatId` int(11) DEFAULT NULL,  
`Phone` varchar(255) DEFAULT NULL,  
PRIMARY KEY (`Id`),  
KEY `FKC4E39B55AF5432C` (`FlatId`),

ここで、Message の Cgridview(admin.php) で、フラット テーブルの PersonId と Person テーブルの Name と Phone を Message テーブルの列とともに表示するように関係を構築する必要があります。

メッセージのモデルクラス(message.php)でこのような関係を定義しました

   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(
    'mapping' => array(self::BELONGS_TO, 'Mapping', 'MapId'),
    'flat'=>array(self::HAS_ONE,'Flat',array('FlatId'=>'Id'),'through'=>'mapping'),
    'person'=>array(self::HAS_ONE,'Person',array('PersonId'=>'Id'),'through'=>'flat'),
    );

}

person テーブルの列をメッセージ グリッドビューに表示するための手順を順を追って説明してもらえますか。

4

2 に答える 2

0

CGridViewのdataProviderを作成できると仮定すると、次のようになります。

<?php 
$this->widget('zii.widgets.grid.CGridView',array(
    'id'=>'message-grid',
    'dataProvider'=>$yourDataProvider //such as $model->search();
    'filter'=>$model,
    'columns'=>array(
        'Id',
        'Mapid',
        'person.name',
        'person.FlatId',
        'person.Phone',
    ));
?>
于 2013-07-29T02:16:17.170 に答える