CActiveDataProvider使用从另一个表访问外键数据的关系

时间:2015-03-21 11:19:38

标签: php yii relational-database cgridview cactivedataprovider

我使用Yii应用程序进行了相对简单的设置,但我在以下场景中努力访问表中的数据:

两张桌子:

payments_info (id, data):其中id是主要自动增量键,模型类名称为PaymentInfo

payments (id, payment_id, other_columns):此处id又是主键,payment_id是外键,指向payment_info表中的一个记录,型号名称付款

在Payment模型类中的relations数组中,我有以下内容:

'payment_id'=>array(self::BELONGS_TO, 'PaymentInfo', 'id'),

我还没有在PaymentInfo模型的关系中添加任何内容,因为从技术上讲,它对另一个表格一无所知。

我有一个控制器从Payments模型创建一个CActiveDataProvider并显示所有记录。在其中,我希望有一个显示“数据”字段的字段。 PaymentInfo模型中的列,但我不知道如何到达那里。

在控制器的cdbcriteria中,用于创建我尝试使用的数据提供程序:

$criteria->with = array('payment_id');

然后在视图中,在CGridView的columns变量里面显示我添加的数据提供者:

array(
            'name'=>'payment_id',
            'visible'=>true,
            'value'=> $data->payment_id->data,
        ),

我也尝试过添加'的不同组合。或"围绕$ data变量但到目前为止没有成功。我设法显示正确的payment_id,但我无法弄清楚如何显示数据'来自另一个表的价值。任何提示赞赏!

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法从YII中的另一个关系表中获取数据

关系函数中的支付模型

public function relations()
    {
        return array(
            'pinfos'   => array(self::BELONGS_TO, 'PaymentInfo', 'payment_id'),
        );
    }

关系函数中的PaymentInfo模型

    public function relations()
    {
        return array(
            'payments'   => array(self::HAS_MANY, 'Payment', 'payment_id'),
        );
    }

并且在zii.widgets.grid.CGridView中放了这个

    <?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'post-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'pinfos.data',
     /* other fields goes here*/
    array(
        'class'=>'CButtonColumn',
    ),
),
)); ?>

无需做任何其他事情。