Страница 1 из 1

Конструктор запросов - сложное условие

Добавлено: 2018.06.14, 16:58
mila.vetrova
В процессе составления запроса заметила, что условия генерятся по-разному. Вопрос: если хочется записать сложное условие способом 1, то есть ли способ указать конструктору, что операнд является колонкой в таблице, а не строкой?

Способ 1. Не работает. Хорошо читается

Код: Выделить всё

$query->where([
    'and',
    ['<', 'c2.lft', 'c0.lft'],
    ['>', 'c2.rgt', 'c0.rgt'],
    ['<>', 'c2.slug', 'root']
])
// WHERE (`c2`.`lft` < 'c0.lft') AND (`c2`.`rgt` > 'c0.rgt') AND (`c2`.`slug` <> 'root')
Способ 2. Работает. Плохо читается

Код: Выделить всё

$query->where('c2.lft <= c0.lft AND c2.rgt >= c0.rgt AND c2.slug <> "root"')
// WHERE c2.lft <= c0.lft AND c2.rgt >= c0.rgt AND c2.slug <> "root"

Re: Конструктор запросов - сложное условие

Добавлено: 2018.06.14, 17:58
andku83

Код: Выделить всё

    ...
    ['<', 'c2.lft', new \yii\db\Expression('c0.lft')],
    ...

Re: Конструктор запросов - сложное условие

Добавлено: 2018.06.14, 18:09
mila.vetrova
Благодарю за подсказку! Теперь буду пользоваться