我有users
表,其中有city_id
,cities
表中的每个城市都有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;
欲了解更多信息,请阅读文档