【问题标题】:How to join 3 tables in CDbCriteria and access those values from CGridView如何在 CDbCriteria 中加入 3 个表并从 CGridView 访问这些值
【发布时间】:2014-09-04 11:59:14
【问题描述】:

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

如何JOIN 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

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

请帮忙。 谢谢。

【问题讨论】:

  • 您需要在模型内定义关系并使用 CDbCriteria 的with 字段。
  • 查看following link,这里是doc,您可以阅读如何将sql query 转换为yii 代码

标签: yii cgridview


【解决方案1】:

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

'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.

这将为item模型生成数据,用于invoice,反向关系。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 cgridview 参数中使用关系和访问列使用,就像这样

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

      就是这样。

      【讨论】:

        【解决方案4】:

        使用条件尝试以下代码

        $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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-27
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          相关资源
          最近更新 更多