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



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

    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();

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

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

你可以用雄辩来简单地做到这一点

假设您有用户模型和产品模型。

在数据库结构中,对于产品表,需要包含一个名为 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();

雄辩真的让一切都变得如此干净和美丽

最新更新