Laravel Eloquent belongsToMany()返回第一个()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent belongsToMany()返回第一个()相关的知识,希望对你有一定的参考价值。
我有一个Laravel 5.5应用程序,我有以下型号。
- 工作
- JobSheets类
- 用户
我与我的用户模型有关系
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();
}
并将我的作业方法修改为用户模型:
public function jobs() {
$this->hasMany('App\Job','user_id')->with('latestJobsheet');
}
但是我收到以下错误:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: addEagerConstraints()
假设您的jobs_jobsheets
表包含id
列,最好订购从最新到最旧返回的jobSheets。
这是什么样子:
public function jobSheets()
{
$this->belongsToMany('App\JobSheet','jobs_jobsheets','job_id','sheet_id')->orderBy('id', 'DESC');
}
如果要限制返回的结果数,可以将->limit($num_results)
链接到belongsToMany
方法的末尾
您可以拆分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');
}
}
您可以覆盖$with
模型上的Job
属性,并让它急切加载关系latestJobsheet
。从那里,当您访问jobs
模型上的User
关系时,您应该可以获得最新的工作表。如何确定最新的工作表是一个单独的问题。
以上是关于Laravel Eloquent belongsToMany()返回第一个()的主要内容,如果未能解决你的问题,请参考以下文章
php Laravel 5 Eloquent CheatSheet #laravel #eloquent
php Laravel 5 Eloquent CheatSheet #laravel #eloquent
php [Eloquent CheatSheet] Eloquent #laravel #eloquent的常见查询方法