Php laravel加载具有给定技能的候选人

Php laravel加载具有给定技能的候选人,php,html,laravel,search,Php,Html,Laravel,Search,在我的网站上,用户可以创建候选人(一对多关系),这些候选人可以拥有技能(多对多) 用户模型: public function candidates() { return $this->hasMany(Candidate::class); } 候选模型: public function skills() { return $this->belongsToMany(Skill::class, 'candidate_skill', 'candidate_id', 'sk

在我的网站上,用户可以创建候选人(一对多关系),这些候选人可以拥有技能(多对多)

用户模型:

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>
但这只是加载了所有只显示css技能的候选人,即使没有css技能的候选人也是如此。我只想加载有技能的候选人,而忽略其他人


我怎么做,我不知道:在你的技能模型中,你的关系定义有错误。你写的

public function candidates() {
    return $this->belongsToMany(Candidate::class, 'candidate_skill', 'candidate_id', 'skill_id')
    ->withTimestamps();
}
交换“候选人id”和“技能id”。本地外键总是排在第一位

public function candidates() {
    return $this->belongsToMany(Candidate::class, 'candidate_skill', 'skill_id', 'candidate_id')
    ->withTimestamps();
}
你在找什么

具有CSS技能的当前用户候选人:

$withCss = Auth::user()->candidates()->whereHas('skills', function ($q) {
    $q->where('name', 'css');
})->get();

“我想搜索与“css”同步的候选人,并且只在表格中显示这些候选人。”。。但是你说。。“但这只是加载了所有候选人,只显示了css技能,如果他们没有css技能,他们就没有技能了。”。。。你到底想要什么?你能解释更多吗?我希望它只加载有css技能的候选人。但是,这种急切的负载所做的只是加载所有候选人的css技能,即使他们甚至没有。这是非常拉威尔相关。你应该用你拥有的用户/技能/候选人的模型关系更新你的问题。这会有帮助的,我已经做了?用户有很多候选人,候选人有很多技能。向Question添加了模型函数哦,从未遇到任何错误,所以不确定它是否真的有任何功能,但无论如何还是要感谢:3Didn还没有遇到错误。。。因为你没有尝试通过技能来吸引候选人。例如,当您希望获得与所有候选人的技能时
$skill=skill::with('candidates')->find(1)这就是您将收到该错误的地方。
$withCss = Auth::user()->candidates()->whereHas('skills', function ($q) {
    $q->where('name', 'css');
})->get();