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