我正在尝试制作一个数据表,但是在查询数据库时遇到问题。我想做的是在数据表上为每个用户选择一个实例,我想获取该用户创建的所有产品的计数。
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();
雄辩真的让一切都变得如此干净和美丽