如何解决如何从组中获得用户,并在laravel中将两个关系合并在一起?
我想从组中接收所有用户。 问题是在这一组中,他们是学生用户(带有数据透视表)和普通用户。 所以我必须将它们合并在一起,但是我仍然想保持雄辩的一切可能性。 我来到这里:
dd($this->belongsToMany(User::class)->union($this->hasManyThrough(User::class,Student::class,'class_id','id','user_id'))->get());
我的数据库关系
Users
- id
Group
- id
Students
- id
- user_id (fk to users)
- class_id (fk to groups)
User_Group
- user_id (fk to users)
- group_id (fk to groups)
用户模型:
public function students()
{
return $this->hasMany(Student::class);
}
public function groups()
{
return $this->belongsToMany(Group::class);
}
学生模型
public function user()
{
return $this->belongsTo(User::class,'user_id');
}
public function class()
{
return $this->belongsTo(Group::class,'class_id');
}
组模型
public function students()
{
return $this->hasMany(Student::class,'class_id');
}
public function users()
{
return $this->belongsToMany(User::class);
}
public function members()
{
//this causes the problem!!
return $this->belongsToMany(User::class)->union($this->hasManyThrough(User::class,'user_id'));
}
解决方法
在用户模型关系中
public function group(){
return $this->belongsToMany(Group::class);
}
在组模型关系中
public function user(){
return $this->belongsToMany(User::class,'user_group');
}
在学生模型中的关系
public function user(){
return $this->belongsToMany(User::class,'user_id','id');
}
public function group(){
return $this->belongsToMany(Group::class,'class_id','id');
}
您现在可以拨打电话
$users = User::whereHas('groups',function ($query){
$query->where('group_id',1);
})->get();
,
有时,从一个模型到另一个模型(由于数据透视表)而有两种关系。在我的示例中,您可以使用关系user_groups和关系学生从用户转到组。为了获得属于某个组的所有用户,我需要同时调用两个关系。为了解决这个问题,我使用了Abdulmajeed的示例来解决它。您可以在下面看到代码。感谢您的帮助。
public function members()
{
return User::whereHas('groups',function($q)
{
$q->where('id',$this->id);
})->orWhereHas('students',function($q)
{
$q->where('class_id',$this->id);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。