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