gpt4 book ai didi

php - 使用 Laravel 返回一对多 Eloquent 关系中的最后一条记录

转载 作者:行者123 更新时间:2023-12-02 03:54:30 37 4
gpt4 key购买 nike

假设存在一个一对多关系,其中一个用户有多个作业,并且job表中的最后一条记录是用户当前的作业。让用户返回上次工作的更好方法是什么?

这是我尝试过的。

用户类别

public function ejob(){
return $this->hasMany(Ejob::class);
}

Ejob类

public function user(){
return $this->belongsTo(User::class);
}

API Controller 方法

public function index()
{
return UserResource::collection((
User::with(
$this->particulars() // I want the last record from this line
)->orderBy('id', 'desc')->get() ));
}

详情方法

// I want the last record from this
private function particulars(){
return
[
'ejob.company:id,name',
'ejob.job:id,title',
'ejob.department:id,name',
'ejob.reporting:id,surname,first_name,other_name',
'ejob.employmentstatus:id,name',
'country:id,name',
'gender:id,name',
'state:id,name'
];
}

用户资源

public function toArray($request)
{
//return parent::toArray($request);
return [
'data' => [
'id' => $this->id,
'surname' => $this->surname,
'first_name' => $this->first_name,
'other_name' => $this->other_name,
'email' => $this->email,
'phone_number' => $this->phone_number,
'birthday' => $this->birthday->format('d-m-Y'),
'age'=> $this->birthday->age,
'ejob' => $this->whenLoaded('ejob'),
];
}

目前,这会返回一个包含 ejobs 表中所有相关记录的用户,但我只想要最后一个作业。

最佳答案

您可以为同一关系定义另一种关系方法,但将其定义为 Has One 而不是 Has Many:

public function currentJob()
{
return $this->hasOne(Ejob::class, ...)->latest();
// order by by how ever you need it ordered to get the latest
}

然后您可以在需要时立即加载该关系,而不是 ejob 关系。

关于php - 使用 Laravel 返回一对多 Eloquent 关系中的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59353057/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com