Laravel使用城市id按州获取用户



我有users表,其中有city_idcities表中的每个城市都有state_id。如何让任何州的用户使用city_id

这是我的代码:

$users = User::role('company')
->when((int) $state, function ($query, $state) {
// here query
})
->when((int) $city, function ($query, $city) {
return $query->where('city_id', $city);
})
->get();

我尝试过:

$users = User::role('company')
->when((int) $state, function ($query, $state) {
$cities = City::where('state_id', $state)
->pluck('id')
->toArray();
return $query->whereIn('city_id', $cities);
})
->when((int) $city, function ($query, $city) {
return $query->where('city_id', $city);
})
->get();

这是可行的,但如何在不使用City模型进行新查询的情况下正确进行此查询?

您是否建立了用户和城市之间的关系?应该是这样的:

public function city()
{
return $this->belongsTo(City::class, 'city_id');
}

你可以使用这个关系来让用户知道哪个城市属于那个州:

$users = User::role('company')
->when((int) $state, function ($query)use ($state) {
return $query->whereHas('city',function ($query)use ($state){
$query->where('state_id',$state);
});
})
->when((int) $city, function ($query)use($city) {
return $query->where('city_id', $city);
})
->get();

您可以使用Laravel HasManyThough

假设你有一个州,每个州都有很多城市,每个城市都有很多用户

然后在状态模型中,你可以添加这个函数

public function users()
{
return $this->hasManyThrough(User::class, City::class);
}

该函数将返回给定状态下的所有用户

示例:

$state = State::first();
$users = $state->users;

欲了解更多信息,请阅读文档

最新更新