Я новичок в Yii Framework. Поэтому мой вопрос: возможно ли использовать одно и то же свойство более одного раза в критериях в 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
параметр, и нет функции для управления этим. Так…
Если Вы используете критерии неактивным способом:
Расширить этот класс
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
приводит к пользователю а также на клиентские таблицы — и это против структуры базы данных.
Других решений пока нет …