Набор результатов форматирования Laravel 5.4 - PullRequest
0 голосов
/ 03 октября 2018

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

$sessions = new Session();
$results =  $sessions->where('session_status', $status)->where('application_period_id', (int) ApplicationPeriod::all()->last()->id)->get()->pluck('speaker_id');

$speakers = Speaker::whereIn('id', $results)
                ->with('session.audiancesession.audiances')
                ->with('session.subjectsession.subjects')
                ->with(['session' => 
                       function ($query) use($status) {
                           $query->where('session_status', '=', $status);
                }])->orderBy('last_name')->get();

Это запрашивается через Ajax (axios) ... Теперь вот как форматируется результат:

Obj->data(array of objects)->[0]->name
                                ->address
                                ->session(array of objects)
                                       ->[0]->time
                                            ->fee

Моя проблема в том, что моим параметром сеанса является массив, и он может быть только когда-либо (1), поэтому мне не нужно быть массивом, и вместо этого я хотел бы иметь объект (json).

Спасибо!

1 Ответ

0 голосов
/ 03 октября 2018

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

$sessions = Sessions::with([
         'speaker', 'audiancesession.audiances', 'subjectsession.subjects'
])->where('application_period_id', (int) ApplicationPeriod::orderBy('id','DESC')->first())->get(); 

Обратите внимание на порядок-> сначала в ApplicationPeriod делает так, что вам не нужно получать все периоды применения из базы данных в память.

Тогда ваша клиентская сторона должна обрабатывать массив сессий.

Вы можете слегка преобразовать вышеупомянутое, используя, чтобы получить результат, аналогичный тому, что вам нужно:

$speakers = $sessions->map(function ($session) {
       $speaker = collect($session->speaker->toArray());
       $speaker->put('session', collect($session->toArray())->except('speaker'));
       return $speaker;
})->orderBy('last_name','DESC');

Хотя я бы не стал гарантировать результат здесь, поскольку я не проверял его на ваших (сложных на вид) данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...