我有一个Laravel 5.5应用程序,我有以下型号。
我的用户模型与
有关系public function jobs() {
$this->hasMany('App\Job','user_id')->with('jobSheets');
}
我与我的乔布斯模式有关系
public function jobSheets() {
$this->belongsToMany('App\JobSheet','jobs_jobsheets','job_id','sheet_id');
}
我试图返回所有当前登录的用户'有最新工作单的工作。
一份工作可以有很多工作单但我只想要退回最新的工作单。
我已经在我的控制器中试过了
return Auth::user()->jobs;
然而,它会针对作业返回所有作业单。
我还尝试在我的工作模式上创建另一种方法。
public function latestJobsheet()
{
return $this->jobsheets->first();
}
并将用户模型上的jobs作业方法修改为:
public function jobs() {
$this->hasMany('App\Job','user_id')->with('latestJobsheet');
}
但是我收到以下错误:
调用未定义的方法 照亮\数据库\查询\生成器:: addEagerConstraints()
答案 0 :(得分:0)
假设您的jobs_jobsheets
表包含id
列,最好订购从最新到最旧的jobSheets。
这就是看起来的样子:
public function jobSheets()
{
$this->belongsToMany('App\JobSheet','jobs_jobsheets','job_id','sheet_id')->orderBy('id', 'DESC');
}
如果您想限制返回的结果数量,可以将->limit($num_results)
链接到belongsToMany
方法的末尾
答案 1 :(得分:0)
您可以拆分BelongsToMany
关系并为数据透视表(jobs_jobsheets
)添加模型:
class Job {
public function latestJobSheetPivot() {
return $this->hasOne(App\JobSheetPivot::class)->orderBy('sheet_id', 'DESC');
}
}
class JobSheetPivot {
protected $table = 'jobs_jobsheets';
public function jobSheet() {
return $this->belongsTo(App\JobSheet::class);
}
}
class User {
public function jobs() {
return $this->hasMany(App\Job::class)->with('latestJobSheetPivot.jobSheet');
}
}
答案 2 :(得分:0)
您可以覆盖$with
模型上的Job
媒体资源,并急切加载关系latestJobsheet
。从那里,当您访问jobs
模型上的User
关系时,您应该可以获得最新的工作表。如何确定最新的工作表是一个单独的问题。