Задать вопрос
@belyaevcyrill

Как правильно использовать CASE WHEN в ActiveRecord в YII2?

В YII2-приложении есть некая ActiveRecord-модель SomeModel, которая описывает таблицу some_table. Как сделать, чтобы в методе select я могу указать SQL-конструкцию CASE WHEN?

Когда я пишу это:
$data = SomeModel::find()
    ->select([
        'some_table.region_id',
        'CASE WHEN some_table.region_id IN (1,2,3,4) THEN true ELSE false END AS region_in_range'
    ])
    ->where([
        'some_table.id' => $id,
    ])
    ->all()


и пытаюсь получить значение поля region_in_range в цикле:
foreach($data as $item) {
    echo $item->region_in_range;
}


то YII пишет ошибку Getting unknown property region_in_range.

Модель SomeModel имеет стандартный вид:
class SomeModel extends ActiveRecord {
    public static function tableName() {
        return 'same_table';
    }
}


Как сделать так, чтобы поле region_in_range стало известно YII? И вообще, можно ли в принципе с помощью ActiveRecord прописывать CASE WHEN? Может я вообще не туда засунул CASE WHEN?

Помогите разобраться, как совместить CASE WHEN и ActiveRecord. Либо это можно достичь только средствами Query?

Спасибо.
  • Вопрос задан
  • 1703 просмотра
Подписаться 2 Средний Комментировать
Решения вопроса 1
@matperez
Добавьте публичное поле region_in_range в модель, после этого ORM будет заполнять его данными, а вы сможете к нему обратиться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
раз Вам объект не нужен, то можете добавить ->asArray() или вообще обойтись без AR.
Но если уж использовать объект, то наверное стоит не из базы выбирать, а сделать метод в модели и так возвращать true или flse
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы