Laravel 5.4格式化结果集

时间:2018-10-03 12:25:38

标签: mysql json laravel-5

有人可以帮我转换此查询,以便我的结果集采用不同的格式吗?

$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 :(得分:0)

如果您将客户端代码更改为与每个会话都有发言者的会话数组配合使用,则可能会获得更大的成功,这意味着您的原始查询就像

$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');

尽管我没有在您的(复杂外观)数据上对其进行过测试,但我不能保证此处的结果。