【发布时间】:2018-06-26 00:49:51
【问题描述】:
我想根据他们的技能在我的数据库中搜索用户。然后我想获取与技能匹配的用户配置文件。
我的数据库迁移
用户
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
技能
$table->increments('id');
$table->string('name');
用户技能
$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('skill_id');
这是我的模型:-
用户.php
public function skill(){
return $this->belongsToMany(Skill::class, 'user_skill');
}
用户和技能模型具有多对多关系。
现在,我编写了一个查询,根据他们的技能从“用户”表中选择用户。我的查询如下所示:-
$skills = ["HTML", "CSS", "JavaScript"];
$result = User::with('skill')
->join('user_skill', 'users.id','=','user_skill.user_id')
->join('skills', 'user_skill.skill_id', '=', 'skills.id')
->select('users.name as Name','users.id as UserId')
->selectRaw('COUNT(skills.id) as skill_count')
->whereIn('skills.name', $skills)
->groupBy('users.id')
->orderBy('skill_count', 'desc')
->get();
但我想获得用户以及他们的技能。给定屏幕截图中的每个用户都有大约 5 个技能。 with('skill') 子句应该返回用户及其技能。但是当我将结果放入 foreach 循环中时,
foreach($result as $r){
print_r($r->skill);
}
技能栏为空。 laravel with() 子句应该与用户一起注入技能,因为他们有多对多的关系。是不是我做错了什么?任何帮助表示赞赏。
注意: 当我查询 User::with('skill')->get() 时,它会返回所有具有技能的用户。所以,我想这里的关系绑定很好。
提前致谢。
【问题讨论】:
标签: mysql laravel join many-to-many laravel-query-builder