0

我使用 Yii 应用程序进行了相对简单的设置,但在以下情况下我很难跨表访问数据:

两张表:

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

payments (id, payment_id, other_columns): 这里 id 又是一个主键, payment_id 是外键,指向 payment_info 表中的一条记录,模型类名 Payment

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

'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 但我不知道如何显示另一个表中的 'data' 值。任何提示表示赞赏!

4

1 回答 1

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

无需做任何其他事情。

于 2015-03-21T12:07:49.013 回答