如何从透视表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;