Можно ли добавить больше операторов присоединения к cdbcriteria yii

Я новичок в 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

Здесь я говорю о любой собственности.

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 параметр, и нет функции для управления этим. Так…

Если Вы используете критерии неактивным способом:

Расширить этот класс

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 приводит к пользователю а также на клиентские таблицы — и это против структуры базы данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector