Laravel5.4格式化结果集

vawmfj5a  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(348)

有人能帮我把这个查询转换成不同的格式吗?

$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

我的问题是我的session参数是array,并且只能有(1),所以我不需要是array,我希望使用object(json)。
谢谢您!

bvk5enib

bvk5enib1#

如果您将客户端代码更改为使用会话数组(每个会话都有其说话人),您可能会获得更大的成功,这意味着您的原始查询

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

请注意中的顺序by->first 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');

虽然我不能保证结果在这里,因为我没有测试它对你的(复杂的外观)数据。

相关问题