如何在hasMany关系Laravel中从其他表中呈现数据?

工作网站上,我正在准备一张有关用户,候选人技能和技能的表格。用户具有许多候选人技能。每个候选人技能既属于用户,也属于技能。

candidate_skills表有这些列:

id

user_id 

skill_id

years_xp

comfort_level

created_at

updated_at

该技能表有一个


id

name

...

每个用户都可以从技能表中选择一项技能。该记录被添加为候选人技能。


我正在绘制一个用户列表,我想呈现每个候选人具有的技能。在我的用户模型上,我有一种获取用户的候选人技能的方法:


public function skills()

{

   return $this->hasMany('App\CandidateSkill');

}

如何用技能表中的技能名称填充此列表?


现在,我正在获取如下结果:


$candidates = User::whereIn('department_id', $departmentFilters)

            ->whereIn('work_authorization', $workAuthFilters)

            ->orderBy('updated_at', 'desc')

            ->with('skills')

            ->get();


return response()->json($candidates);

这会加载候选技能列表,但不包括该技能的可读名称。上面查询的结果$candidate->skill如下:


{ "id": 22, "user_id": 43, "skill_id": 64, "years_xp": 2, "comfort_level": null, "created_at": "2019-04-15 18:51:14", "updated_at": "2019-04-15 18:51:14" }

为用户渲染候选人技能时,如何包含技能名称?


例如,id为64的技能的名称为“ PHP”。当显示用户43时,我想用“ PHP”而不是64列出他们的技能。


绝地无双
浏览 224回答 2
2回答

慕标琳琳

用户模型<?phpnamespace App;use Illuminate\Database\Eloquent\Model;use App\Skill;class User extends Model{&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* The skills that belong to the user.&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function skills()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->belongsToMany(Skill::class, 'candidate_skills', 'user_id', 'skill_id' )->withPivot('years_xp', 'comfort_level');&nbsp; &nbsp; }}和技能模型<?phpnamespace App;use Illuminate\Database\Eloquent\Model;use App\User;class Skill extends Model{&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* The users that belong to the user.&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function users()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->belongsToMany(User::class, 'candidate_skills', 'user_id', 'skill_id' )->withPivot('years_xp', 'comfort_level');&nbsp; &nbsp; }}现在,让用户使用department_id和work_authorization过滤器$candidates = User::whereIn('department_id', $departmentFilters)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->whereIn('work_authorization', $workAuthFilters)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->orderBy('updated_at', 'desc')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->with('skills')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->get();并在刀片中显示时@foreach($candidates as $candidate)&nbsp; &nbsp; @foreach ( $candidate->skills as $skill )&nbsp; &nbsp; &nbsp; &nbsp; {{ $skill->name }}&nbsp; &nbsp; @endforeach@endforeach或者@foreach($candidates as $candidate)&nbsp; &nbsp; @foreach ( $candidate->skills as $skill )&nbsp; &nbsp; &nbsp; &nbsp; {{ $skill->pivot->years_xp}}&nbsp; &nbsp; &nbsp; &nbsp; {{ $skill->pivot->comfort_level}}&nbsp; &nbsp; @endforeach@endforeach我没有演示数据可以对其进行测试,但是我想它可以正常工作。
打开App,查看更多内容
随时随地看视频慕课网APP