如何从数据透视表Laravel获取计数?

时间:2019-10-14 12:34:37

标签: 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
                                 3         3
                                 3         2

现在我是filtering the user by cities。我正在使用city_id = 2。这样我就必须获取属于city_id 2的用户数。 我如何使用laravel雄辩的方式得到它

5 个答案:

答案 0 :(得分:1)

有多种方法可以执行此操作,请选中https://laravel.com/docs/5.8/queries

但是一个简单的方法可以是:

UserCity::whereCityId(2)->count();

或者:

UserCity::where('city_id',2)->count();

答案 1 :(得分:0)

如果已正确设置它们之间的关系,则可以执行以下操作:

City::where('id', '=', 2)->withCount('users')->get();

它将在生成的模型上放置一个{relation} _count列,因此您可以像属性一样调用它:$city->users_count

让我知道这是否有帮助。

编辑:有关更多信息,您可以检查official documentation

答案 2 :(得分:0)

如您在答案中所述,您拥有第三张表user_cities

如果您有表user_cities,则将用户计数为

DB::table('user_cities')->where('city_id', '2')->count();

答案 3 :(得分:0)

尝试以下查询:

$count = City::where('id', 2)->whereHas('users')->count();

答案 4 :(得分:0)

确保您在模型中具有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');
    }
}

现在在 Controller 中。

$citieswithcount = City::where('id', 2)->withCount('users')->first();
echo $citieswithcount->users_count;
exit;