如何查询数据库以获取每个用户的帖子并计算用户的帖子数量?

时间:2018-04-22 21:47:03

标签: laravel

我正在尝试创建一个数据表,但是我在查询数据库时遇到了问题。我想要做的是在数据表上选择每个用户的一个实例,我想获取该用户创建的所有产品的计数。

    Products Table
    id  user_id   title
    1      2       tv
    2      2       car
    3      2       book
    4      3       glasses

So user(2) has 3 products
So user(3) has 1 products

以下是我一直在处理的代码

 $users = DB::table('users')
     ->join('products', 'users.id', '=', 'products.user_id')
     ->select('users.*', 'products.id', 'url')
     ->groupBy('products.id', 'url')
     ->get();

2 个答案:

答案 0 :(得分:1)

您需要选择用户详细信息以及按用户ID分组的产品计数,如下所示:

$users = DB::table('users')
    ->selectRaw('users.*, COUNT(products.id) AS products')
    ->join('products', 'users.id', '=', 'products.user_id')
    ->groupBy('users.id')
    ->get();

答案 1 :(得分:1)

你可以用雄辩的

来做到这一点

假设您拥有用户型号和产品型号。

在数据库结构中,对于products表,您需要包含一个名为user_id的列作为整数数据类型。

然后在用户模型上声明此关系

public function products()
{
    return $this->hasMany(Product::class);
}

然后是产品模型关系的反转

public function user()
{
    return $this->belongsTo(User::class);
}

现在您可以简单地执行以下操作

//This returns all users with products (eager loading pointes out by fubar)
$users = User::with('products')->get();

//Now you could pass $users to your view and loop through like so
@foreach($users as $user)
    <li>{{ $user->name }} has {{ $user->products->count() }} </li>
@endforeach

对于特定用户,您可以简单地

$user = User::find($id);
$userProductCount = $user->products->count();
雄辩确实能让一切变得如此干净和美丽