Yii2 Active Record, где% модуля - PullRequest
0 голосов
/ 10 июля 2020

В SQL я мог выбрать записи, идентификаторы которых делятся на 4:

SELECT id FROM table_name WHERE id%4 = 0;

Я пытался сделать это в активной записи Yii2, но это не удалось с ошибкой:

$model = Verses::find()->where(['%4','id',0])->orderBy('id')->all();

Есть ли какой-либо способ или намек в документации по этому поводу?

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Также вы можете сделать это так:

$model = Verses::find()->where(['(id % 4)' => 0])->orderBy('id')->all();

Ошибка показывала, что Unknown column 'id%4' Чтобы express это математическое выражение, мы заключаем это в скобки и добавляем в запрос.

0 голосов
/ 11 июля 2020

Самый безопасный способ - использовать Expression:

$model = Verses::find()->where(new Expression('id%4 = 0'))->orderBy('id')->all();

Хотя добавление круглых скобок в ->where(['(id % 4)' => 0]) может сработать, это довольно хакерский способ, так как это поведение было почти удалено в последнее время версия Yii, поэтому я бы не стал на нее особо полагаться.

0 голосов
/ 10 июля 2020

Я нашел решение путем попытки и ошибки:

$model = Verses::find()->where(['%4=','id',0])->orderBy('id')->all();

Другими словами, знак = должен быть объединен с операцией модуля, т.е. %4=.

...