获取属于多个查询的其他外键的标签

时间:2018-07-02 06:23:55

标签: php laravel laravel-query-builder

我有四个桌子

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表中的状态标签?

1 个答案:

答案 0 :(得分:1)

尝试不使用数据透视模型,只需为users_jobs创建一个模型,然后为jobuserstatus添加属于它的关系

用户模型

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);
}