Извлечение связанных данных в Yii2

78
07 января 2021, 17:00

Есть связи:


    public function getGroup()
    {
        return $this->hasMany(Group::className(), ['id' => 'group_id']);
    }
    public function getKey()
    {
        return $this->hasOne(Key::className(), ['key_board_id' => 'id']);
    }

Сформировал запрос (в модели Key_board):


    $data = $this::find()
    ->select(['id', 'name', 'group_id'])
    ->where(['scenario' => 1, 'user_id' => $user_id])
    ->with([
        'key' => function ($query) {
            $query->select(['id', 'value', 'key_board_id']);
        },
        'group' => function ($query) {
            $query->select(['id', 'foto']);
        }
    ])
    ->orderBy('order')
    ->asArray()
    ->all();

Получаю данные вот в таком виде:


    [
        [ 
            'id' => '1', 
            'name' => 'ddd', 
            'group_id' => '2', 
            'key' => [ 
                [ 
                    'id' => '4', 
                    'value' => 'ggg', 
                    'key_board_id' => '1', 
                ], 
            ], 
            'group' => [ 
                'id' => '2', 
                'foto' => 'data',
            ], 
        ],
    ]

Неплохо, но хотелось бы получить примерно такой результат:


    [
        [ 
            'id' => '1', 
            'name' => 'ddd', 
            'group_id' => '2', 
            'key' => [ 
                [ 
                    'id' => '4', 
                    'value' => 'ggg', 
                    'key_board_id' => '1', 
                ], 
            ], 
            'foto' => 'data',
        ]
    [

Можно ли как-то изменив запрос, чтобы не корректировать данные вручную?

key_board_id и group_id тоже желательно убрать (из запроса нельзя - ошибка).

Спасибо.

Пока сделал так:


    foreach ($data as &$B) {
        if ($B['group']) {
            $B['foto'] = $B['group']['foto'];
        } else {
            $B['foto'] = '';
        }
        if ($B['key']) {
            foreach ($B['key'] as &$key) {
                unset($key['key_board_id']);
            }
        }
        unset($B['group']);
        unset($B['group_id']);
    }
READ ALSO
Python Работа с JSON в MySQL Стоит ли?

Python Работа с JSON в MySQL Стоит ли?

Как происходит процесс добавления/извлечения JSON данных из MySQL? Достаточно ли их просто записывать в виде строки, а потом извлекать, превращать...

82
Создание строк в MySQL

Создание строк в MySQL

Подскажите пожалуйста правильный запрос для создания одинаковых строк, где только одно значение будет отличаться

98
Как можно принять JSON?

Как можно принять JSON?

Подскажите пожалуйста как в PHP принимается JSON? Просто, я тут решил потестить в битриксе24 исходящие веб хуки написал API наnet но он почему-то...

115
Как получить данные из потоков не используя вывод для пользователя

Как получить данные из потоков не используя вывод для пользователя

Всем приветИспользуя для REST-клиента библиотеку GuzzleHttp

105