如何在CDbCriteria中连接3个表并从CGridView访问这些值

时间:2014-09-04 11:59:14

标签: yii cgridview

我是yii的新手,我想知道:

如何加入 CDbCriteria 中的3个表,并从 CGridView

中访问这些值

我的表:

invoice     (IID,date,cusID)  PK = IID
invoiceItem (invIID, IID, itemID, date, cusID)  PK= invIID   FK = IID
item        (itemID, name, price, cat)  PK = itemID

我只需加入这三个表并在 CGridView 上显示。 如果您有任何教程,请提供相关说明。

请帮忙。 谢谢。

4 个答案:

答案 0 :(得分:1)

尝试这样做创建关系 在模型

'invoices' => array(self::HAS_MANY, 'invoiceItem', 'itemID'),

invoiceItem 模型

'invoice' => array(self::BELONGS_TO, 'invoice', 'IID'),

然后,您可以在视图中的任何位置使用它,如下所示

$item->invoices;  //returns array of invoiceItems objects

$item->invoices['index']->invoice; //return invoice object for that item.

这将生成商品模型的数据,用于发票,反向关系。

答案 1 :(得分:1)

CDbCriteria具有join属性,您可以在其中使用SQL代码进行JOIN。

答案 2 :(得分:1)

在cgridview params中使用关系和访问列使用,如下所示

'columns' => array(
    array('name' => 'columnname',
          'value' => 'isset($data->relationname) ? $data->relationname->name : ""' )
)

是的。

答案 3 :(得分:0)

尝试使用符合条件的代码

$criteria->select = 't.*'; //specify list of columns you need
$criteria->join = 'INNER JOIN invoiceItem on t.invIID=invoiceItem.invIID INNER JOIN item on invoiceItem.itemID = item.itemID