我是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
我在这里谈论任何财产。
答案 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
会导致用户和到客户端表格 - 这是针对数据库结构的。