0

我有 2 张桌子。表有关系 (HAS_MANY)
table1: user(id,name) table2:address(id,userId,address)
用户可以有一些地址我用痣定义关系:user.php 和 address.php

用户.php

 'address' => array(self::HAS_MANY, 'address', 'userId'),

地址.php

'user' => array(self::BELONGS_TO, 'user', 'userId'),

当我写

$dataProvider = new CActiveDataProvider('user')

我只得到用户表的记录,但我想获取两个表的记录,我想为每个用户获取名称、数组(地址),该怎么做?

用户控制器.php

public function actionIndex() {

         $dataProvider = new CActiveDataProvider('User');
        $this->render('index', array(
            'dataProvider' => $dataProvider,
        ));
    }   

索引.php

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); ?>

_view.php

<b><?php echo $data->name)); ?>: <?php      $data->address->address;     ?>:</b>
4

3 回答 3

1

在 indexaction 函数中,更改 dataprovider 代码如下。

$dataProvider = new CActiveDataProvider('User','criteria'=>array(
   'with'=>array(
       'address'
    ),
    'together'=>true,
));

您可以在视图文件address中使用从表中获取数据。$data->address->address_table_field_name

addressrelation在您的用户模型文件中定义的名称。

于 2014-01-04T06:47:25.027 回答
0

尝试使用

$model= User::model()->with('address')->findAll();

注意:- address in with('address')是关系名称。

例如:- 要获取用户记录,试试这个

foreach($model as $record)
{
echo $record->id . $record->name;
}

要获取地址记录,试试这个

foreach($model as $record)
    {
    foreach($record->address as $myaddress)
{
echo $myaddress->id . $myaddress->userId . $myaddress->address;
}
    }
于 2014-01-04T06:46:06.580 回答
0

您不需要使用CActiveDataProvider,而是直接使用模型。

试试看

foreach( User::model()->findAll() as $user ) {
   $address = $user->address;
   foreach( $address as $a ) {

   }
}
于 2014-01-04T06:48:05.090 回答