我有四个桌子
1位用户,2位自我工作,3位用户工作,4个状态
用户作业是具有用户的数据透视表,自助作业为每个用户保存作业。现在,我有一个查询,可以返回每个用户的所有作业及其相关信息。 在这里:
return $this->belongsToMany('App\SelfJob','users_jobs','user_id','self_job_id')->withPivot(['priority','status_id'])->withTimestamps();
如您所见,我需要透视表中的其他列(优先级和status_id)。 Status_id也是状态表的外键。 如何以连接状态表的方式更改查询,并返回将其ID保存在users_jobs表中的状态标签?
答案 0 :(得分:1)
尝试不使用数据透视模型,只需为users_jobs
创建一个模型,然后为job
,user
和status
添加属于它的关系
用户模型
public function userJobs(){
return $this->hasMany('App\UserJob','user_id');
}
UserJob模型
class UserJob extends Model {
protected $table = 'users_jobs';
public function user(){
return $this->belongsTo('App\User');
}
public function job(){
return $this->belongsTo('App\Job', 'self_job_id');
}
public function status(){
return $this->belongsTo('App\Status');
}
}
获取数据
$user = User::with('userJobs', 'userJobs.job', 'userJobs.status')->find($userId);
foreach($user->userJobs as $userJob){
dd($userJob->priority);
dd($userJob->status->label);
}