是否可以向cdbcriteria yii

时间:2017-08-16 07:16:10

标签: php yii

我是Yii框架的新手。所以我的问题是,是否可以在yii CDbCriteria中的条件中多次使用相同的属性。

例如,是否可以在条件中使用两次连接属性。如下例所示。

$criteria=new CDbCriteria;
$criteria->join='LEFT JOIN Client ON Client.id=Invoice.clientId';
$criteria->join='LEFT JOIN User ON User.id=Invoice.clientId';
$criteria->condition='Client.businessId='. Yii::app()->userInfo->business

我在这里谈论任何财产。

1 个答案:

答案 0 :(得分:0)

只需将每个连接部分写为单个字符串:

$joins = [];

$joins[] = 'LEFT JOIN Client ON Client.id=Invoice.clientId';

/* ... */

$joins[] = 'LEFT JOIN User ON User.id=Invoice.clientId';

/* ... */

$criteria->join = implode(' ', $joins);

正如您可以从自己的代码($c->join = '')中看到的那样,您正在直接修改它的join参数,并且没有任何操作可以操作它。所以......

如果您正在以非ActiveRecord方式使用条件:

扩展此课程

class DbCriteria extends CDbCriteria {
     public function addJoin($query) {
         /**
          * @look CDbCriteria @line 550
          */
         if($this->join !== $query) {
             if ($this->join === '') {
                $this->join = $query;
             } elseif($query !== '') {
                $this->join .= ' '.query;
             }
          }
     }
}

现在你可以做到

$criteria = new DbCriteria();
$criteria->addJoin('LEFT JOIN Client ON Client.id=Invoice.clientId');
$criteria->addJoin('LEFT JOIN User ON User.id=Invoice.clientId');

如果 使用ActiveRecord,请使用CDbCriteria->with = []

$criteria->with = [
    'client',
    'user'
];

警告

您的外键无效。您的Invoice.client会导致用户到客户端表格 - 这是针对数据库结构的。