是否可以向 cdbcriteria yii 添加更多连接语句

is it possible to add more join statesments to cdbcriteria yii

我是 Yii 框架的新手。所以我的问题是,是否可以在 yii CDbCriteria.

的条件中多次使用相同的 属性

例如,是否可以在条件中两次使用 join 属性。就像下面的例子。

$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

这里我说的是任何属性。

简单地将每个连接部分写成单个字符串:

$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

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 导致用户 并且 导致客户端表 - 这违反了数据库结构。