如何使用 Laravel Eloquent 多次返回一个关系?

问题描述 投票:0回答:1

我有一对一的关系:

Task -> hasMany(History)

History = [{ 'key'=>1, 'date'=>'2024.12.18', 'data'=>'some log'},
           { 'key'=>2, 'date'=>'2024.12.17', 'data'=>'other log'},
           { 'key'=>1, 'date'=>'2024.12.16', 'data'=>'some other log'},
           { 'key'=>3, 'date'=>'2024.12.15', 'data'=>'log'}]

我想在多个版本中检索具有此关系的任务:通过两个键,第一个元素:

$task = Task::where('id',1)
     ->with(['history' => 
            fn($q) => $q->where('key', 1)->orderBy('date','asc')->first()])
     ->with(['history' => 
            fn($q) => $q->where('key', 2)->orderBy('date','asc')->first()])
     ->get();

我想要实现的目标:

$task = [{'id'=>1, 'taskdata'=>'data', 'history'=>[
             {'key'=>1, 'date'=>'2024.12.16', 'data'=>'some other log'},
             {'key'=>2, 'date'=>'2024.12.17', 'data'=>'other log'}]
        }]

我不知道怎么做。首先用两个范围进行,但结果相同:只有最后一个关系可见。

laravel
1个回答
0
投票

您可以重构它并使用 history 关系获取 Task,其中 id 位于值数组 [1, 2] 中,而不是逐个运行检查并使查询变得复杂。

$task = Task::where('id',1)
     ->with('history' => 
            fn($q) => $q->whereIn('key', [1, 2])->orderBy('date','asc')
     )
     ->get();
© www.soinside.com 2019 - 2024. All rights reserved.