这可能非常简单,但我无法找到解决方案......任何帮助都将受到赞赏。
我有3个表:用户,技能和项目,所有这些表都以多对多关系相互连接。
用户模型
public function skills()
{
return $this->belongsToMany('Skill')->withPivot('level');
}
public function projects(){
return $this->belongsToMany('Project')->withPivot('user_id', 'project_id');
}
技能模型
public function users() {
return $this->belongsToMany('User')->withPivot('level');
}
public function projects() {
return $this->belongsToMany('Project')->withPivot('level');
}
项目模型
public function users(){
return $this->belongsToMany('User')->withPivot('user_id', 'project_id');
}
public function skills(){
return $this->belongsToMany('Skill')->withPivot('level');
}
所以,一个多对多的三角形。我想获得所有项目,其技能是 子集 的特定用户技能。所以基本上"建议项目"对于用户。
$projects = Project::whereHas('skills', function($q) use($array)
{
$q->thatAreSubsetOf($array);
//$array contains names or ids of users skills
})->orderBy('created_at', 'DESC')->get();
如果某些$user->skills
是' PHP',' C'并且' Javascript',所有返回的项目技能应仅成为其中的一部分(例如 {' PHP',' C&#39 ;}或{' PHP',' Javascript'}或{' Javascript',' C'}或{' PHP&# 39;,' C',' Javascript'}或{' PHP'},或{' Javascript'}或{' C'} )
我尝试了很多东西,在Laravel Docs /这里研究了很多,但似乎无法得到我想要的东西..
答案 0 :(得分:0)
基本上您的要求可以达到Many To Many Polymorphic Relations
。您的要求是使用User和Project的技能,因此使用MTMPR
可以很容易地处理它。
下面的示例显示了我如何使用项目和用户实现共享技能。
数据库架构
技能
id integer
name string
skillable
id integer
skillable_id integer
skillable_type string
<强>模型强>
技能
class Skill extends Eloquent{
public function projects(){
return $this->morphedByMany('Project', 'skillable');
}
public function users(){
return $this->morphedByMany('User', 'skillable');
}
}
项目
class Project extends Eloquent{
public function skills(){
return $this->morphToMany('Skill', 'skillable');
}
}
用户
class User extends Eloquent{
public function skills(){
return $this->morphToMany('Skill', 'skillable');
}
}
如何从项目获得技能
$project = Project::find($id);
$projectsSkill = $project->skills()->all();
如何从技能中获得项目
$skill = Skill::find(1);
$projects = $skill->projects();
如果你仍然发现不清楚处理这些情况的事情,请告诉我。