我有一对一的关系:
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'}]
}]
我不知道怎么做。首先用两个范围进行,但结果相同:只有最后一个关系可见。
您可以重构它并使用 history 关系获取 Task,其中 id 位于值数组 [1, 2] 中,而不是逐个运行检查并使查询变得复杂。
$task = Task::where('id',1)
->with('history' =>
fn($q) => $q->whereIn('key', [1, 2])->orderBy('date','asc')
)
->get();