yii2 via asArray - смущает результат

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

yii2 via asArray - смущает результат

Сообщение Insolita »

есть модель Ekipaj со связями через вспомогательную таблицу

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

 /**
     * @return \yii\db\ActiveQuery
     */
    public function getEkipajRayons()
    {
        return $this->hasMany(EkipajRayon::className(), ['ekipaj_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getRayons()
    {
        return $this->hasMany(Rayon::className(), ['rayon_id' => 'rayon_id'])->via('ekipajRayons');
    }
Делаю запрос

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

$current=Ekipaj::find()->select('id,name')->with(['rayons'=>function($q){
                $q->select('rayon_id,name');
            }])->asArray()->all();
VarDumper::dump($current,10,true);
и в результате получаем масив типа

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

    0 => [
        'id' => '1'
        'name' => 'Экипаж №1 (Такой-то)'
        'ekipajRayons' => [
            0 => app\models\EkipajRayon#1
            (
                [yii\db\BaseActiveRecord:_attributes] => [
                    'ekipaj_id' => 1
                    'rayon_id' => 5
                ]
                [yii\db\BaseActiveRecord:_oldAttributes] => [
                    'ekipaj_id' => 1
                    'rayon_id' => 5
                ]
                [yii\db\BaseActiveRecord:_related] => []
                [yii\base\Model:_errors] => null
                [yii\base\Model:_validators] => null
                [yii\base\Model:_scenario] => 'default'
                [yii\base\Component:_events] => []
                [yii\base\Component:_behaviors] => []
            )
            1 => app\models\EkipajRayon#2
            (
                [yii\db\BaseActiveRecord:_attributes] => [
                    'ekipaj_id' => 1
                    'rayon_id' => 6
                ]
                [yii\db\BaseActiveRecord:_oldAttributes] => [
                    'ekipaj_id' => 1
                    'rayon_id' => 6
                ]
                [yii\db\BaseActiveRecord:_related] => []
                [yii\base\Model:_errors] => null
                [yii\base\Model:_validators] => null
                [yii\base\Model:_scenario] => 'default'
                [yii\base\Component:_events] => []
                [yii\base\Component:_behaviors] => []
            )
        ]
        'rayons' => [
            0 => [
                'rayon_id' => '5'
                'name' => 'Марково'
            ]
            1 => [
                'rayon_id' => '6'
                'name' => 'Мегет'
            ]
        ]
    ]
так вот смущает меня эта промежуточная таблица, ожидался результат типа

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

 0 => [
        'id' => '1'
        'name' => 'Экипаж №1 (Такой-то)',
       'rayons' => [
            0 => [
                'rayon_id' => '5'
                'name' => 'Марково'
            ],
            1 => [
                'rayon_id' => '6'
                'name' => 'Мегет'
            ]
        ],

Ну или даже с промежуточной, но всё же в более адекватном виде без служебных данных
В общем, это баг, или фича, или как-то можно кастомизировать без дополнительной обработки результата?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение samdark »

А если заменить with на joinWith? В любом случае похоже на баг...
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение Insolita »

c joinWith такая же фигня
Аватара пользователя
MaxHero
Сообщения: 144
Зарегистрирован: 2011.09.12, 04:34
Откуда: Украина, Киев

Re: yii2 via asArray - смущает результат

Сообщение MaxHero »

Сорри за оффтоп, но getEkipajRayons() - это жесть
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение Insolita »

это не жесть это gii -генератор :-))
Аватара пользователя
MaxHero
Сообщения: 144
Зарегистрирован: 2011.09.12, 04:34
Откуда: Украина, Киев

Re: yii2 via asArray - смущает результат

Сообщение MaxHero »

Insolita писал(а):это не жесть это gii -генератор :-))
Ок, значит ставим "5 баллов" проектировщику БД :)
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение Insolita »

муж проснётся - передам :-)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение samdark »

Можно на github отрепортить? Помечу как баг.
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: yii2 via asArray - смущает результат

Сообщение Insolita »

там вроде как есть уже https://github.com/yiisoft/yii2/issues/3568 только как-то не очень внятно объяснено
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: yii2 via asArray - смущает результат

Сообщение lynicidn »

внятно вроде
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: yii2 via asArray - смущает результат

Сообщение zelenin »

MaxHero писал(а):Сорри за оффтоп, но getEkipajRayons() - это жесть
я с первого взгляда решил, что это польский сайт )
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: yii2 via asArray - смущает результат

Сообщение lynicidn »

zelenin писал(а):
MaxHero писал(а):Сорри за оффтоп, но getEkipajRayons() - это жесть
я с первого взгляда решил, что это польский сайт )
:roll: вы не видели жесть ;)
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: yii2 via asArray - смущает результат

Сообщение lynicidn »

если модель Ekipaj, то связь можно делать getRayons [getRegions]. Ekipage лучше переименовать в Driver какой нибудь :?:
Ответить