我在用户 - cityarea之间有多对多连接。 我也有连接cityarea的区域(一个cityarea只能连接一个区域)。
我有这个数据库结构:
用户
cityareas
cityarea_user
领域
接下来我有模特
用户
public function cityareas()
{
return $this->belongsToMany('App\Cityarea');
}
Cityarea
public function area()
{
return $this->belongsTo('App\Area');
}
public function users()
{
return $this->belongsToMany('\App\User');
}
区域
public function cityareas()
{
return $this->hasMany('App\Cityarea');
}
问题:
如何通过Eloquent获取areas.name = "South"
所有用户?
谢谢!
答案 0 :(得分:2)
使用whereHas,您可以执行以下操作:
$users = User::whereHas('cityareas.area', function ($query) {
$query->where('name', 'South');
})->get();
答案 1 :(得分:0)
Jeune Guerrier 解决方案是完美的,但您可以使用with()
雄辩的方法如果您还需要cityarea
收集以及用户集合。
$users = User::with('cityareas')->whereHas('cityareas.area', function ($query) {
$query->where('name', 'South');
})->get();
答案 2 :(得分:-1)
这正是构建belongs to many关系的原因。
您只需要执行Cityarea::where('name', 'South')->first()->users
;
如果您想对查询采取进一步措施,例如按用户创建的排序,你可以做到
Cityarea::where('name', 'South')->first()->users()->orderBy('creaated_at', desc')->get();
请注意,如果没有名称为“South”的Cityarea,则上面的->first()
查询将返回null,因此无法获取用户。
以编程方式执行此操作的更高效方法是使用whereHas
方法,如下面的评论所述。