【发布时间】:2017-04-10 13:51:41
【问题描述】:
在我的网站中,用户可以创建候选人(一对多关系)并且这些候选人可以拥有技能(多对多)。
用户模型:
public function candidates() {
return $this->hasMany(Candidate::class);
}
候选模型:
public function skills() {
return $this->belongsToMany(Skill::class, 'candidate_skill', 'candidate_id', 'skill_id');
}
技能模型:
public function candidates() {
return $this->belongsToMany(Candidate::class, 'candidate_skill', 'candidate_id', 'skill_id')
->withTimestamps();
}
我已经有一个索引页面,用户可以在其中查看他所有的候选人
$candidates = Auth::user()->candidates;
在编辑页面上,技能可以同步到相关候选人
$candidate->skills()->sync(request()->skills);
然后返回索引页面,它会显示候选人拥有多少技能
<td>{{count($candidate->skills)}}</td>
现在,我需要创建一个搜索栏。我的表已经有一个(dataTable)可以在已经加载的 td 中搜索。但是我需要一个搜索栏来搜索具有某些技能的候选人,比如我想搜索与“css”同步的候选人,并且只在表格中显示这些候选人。
我阅读了 laravel 文档并尝试加载它:
$hasCss = $candidates->load(['skills' => function ($query) {
$query->where('name', '=', 'css');
}]);
但这只是加载了所有候选人,只显示了 css 技能,即使是没有 css 技能的候选人。我只想加载有技能的候选人,而将其他候选人排除在外。
我该怎么做,我一无所知:s
【问题讨论】:
-
"我想搜索与 'css' 同步的候选人,并且只在表格中显示。" ..但是你说..“但这只是加载了所有候选人并且只显示了css技能,如果他们没有它,他们就没有技能。” ...它混淆你真正想要什么?你能解释更多吗?
-
我希望它只加载具有 css 技能的候选人。但这种急切的负载所做的只是让所有候选人都只拥有 css 技能,即使他们甚至没有。
-
这与 laravel 非常相关。您应该使用您拥有的用户/技能/候选人的模型关系来更新您的问题。这会有所帮助
-
我已经这样做了?用户有很多候选人,候选人有很多技能。为问题添加了模型函数