如何从透视表laravel获取计数?
我有两张桌子如何从透视表laravel获取计数?,laravel,eloquent,count,Laravel,Eloquent,Count,我有两张桌子 User cities user_cities id name id name user_id city_id 1 aaa 1 cityA 2 1 2 bbb 2 cityB 2 3 3 ccc 3 cityC 1 2
User cities user_cities
id name id name user_id city_id
1 aaa 1 cityA 2 1
2 bbb 2 cityB 2 3
3 ccc 3 cityC 1 2
3 3
3 2
现在我正在按城市过滤用户。我有城市id=2
。因此,我必须获得属于城市id 2的用户数。
如何使用laravel eloquent实现这一点如果您正确设置了它们之间的关系,您可以这样做:
City::where('id', '=', 2)->withCount('users')->get();
它将在生成的模型上放置一个{relation}\u count列,因此您可以像调用属性一样调用它:$city->users\u count
让我知道这是否有用
编辑:有关更多信息,您可以查看。如您在回答中所述,您有第三个表
user\u cities
如果您有表user\u cities
DB::table('user_cities')->where('city_id', '2')->count();
请尝试以下查询:
$count = City::where('id', 2)->whereHas('users')->count();
有不同的方法可以做到这一点,请检查 但一个简单的方法是:
UserCity::whereCityId(2)->count();
或:
确保您在模型中具有
belongsToMany
关系
City.php模型
class City extends Model
{
public function users(){
return $this->belongsToMany('App\User', 'user_cities', 'city_id', 'user_id');
}
}
User.php模型
class User extends Model
{
public function cities(){
return $this->belongsToMany('App\City', 'user_cities','user_id','city_id');
}
}
现在在控制器中
$citieswithcount = City::where('id', 2)->withCount('users')->first();
echo $citieswithcount->users_count;
exit;
$citieswithcount = City::where('id', 2)->withCount('users')->first();
echo $citieswithcount->users_count;
exit;