Почему в передаются не все атрибуты при запросах ActiveRecord?

Оговорюсь сразу это rest
вот запрос

$char=new Expression("*, to_char(".News::tableName().".create_at,'MM') as mouth");
        return News::find()->select($char)->where(['top'=>true])->orderBy(['mouth'=>SORT_ASC])->all();

получаю такой ответ
[
    {
        "id": 1,
        "title": "Title",
        "description": "Title",
        "create_at": "2019-07-04 09:35:19",
        "update_at": "2019-07-04 09:35:19",
        "top": true
    }
]


почему не отображается mouth ?
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ответы на вопрос 3
@pocifis
PHP-разработчик
Этого атрибута не существует в таблице и он явно не указан в модели, соотвественно вы его не получаете. Либо используйте asArray и получайте массив вместо моделей, либо явно добавляйте нужно свойство в вашу модель.

P.S. Под mouth вы имели в виду month?
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
ActiveRecord работает только с атрибутами модели.
Используйте, например, yii\db\Connection и получите свой псевдоним в конце массива атрибутов.
query = Yii::$app->db->createCommand("SELECT *, DATE_FORMAT(".Cars::tableName().".car_created_date,'%m') as mouth From `cars` WHERE `status` = 3 LIMIT 2")->queryAll();
Ответ написан
Комментировать
Gomonov
@Gomonov
После выполнения запроса полученные данные сверяются со схемой модели (ActiveRecord::populateRecord). В моделе нет поля month, вот оно и не возвращается.
Если create_at,'MM') as mouth заменить на любое существующее поле - получите результат в виде месяца.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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