我正在尝试列出有关表格的信息,其中一个信息是用户拥有的汽车数量。我有两个数据库,一个是users
,另一个是cars
。表格cars
有一列owner
,其中包含所有者的id
。我想知道的是:如何列出所有用户以及每个用户拥有的汽车总数?
$users = Users::all();
此代码返回一个包含所有用户的数组,我想要的是传递每个用户在同一$users
变量上拥有的汽车总数。我怎样才能做到这一点?有没有办法加入另一个表,计数然后返回或类似的东西?
@edit
我试过这样,但不起作用:
$users = Users::join('cars', 'cars.owner', '=', 'users.id')->select(DB::raw('count(cars.car_id) as total'))->get();
答案 0 :(得分:2)
你需要通过statemant组:
select users.name, count(*) as counter from users
join cars on ... group by users.name;
好的,更多细节:
您必须将users表与cars表一起加入。你做到了,是的。
然后你必须从用户表中选择一个col,并将一个count(*)作为计数器
现在的诀窍是,从“用户”表中“分组”col。这会将所有双用户行与一行匹配,并计算一个用户拥有的汽车数量
select语句是:
“select users.id,count(*)as counter from users from cars on cars.owner = users.id group by users.id”
多数人......希望能帮到你
答案 1 :(得分:1)
我认为这会对你有帮助......
Users::with([
'cars' => function($q){
$q->select([DB::raw("count(car_id) as total"), "car_id"])
->groupBy('car_id');
}
])->get();
答案 2 :(得分:1)
您可以在raw中尝试此SQL查询。我试过了它的确有效。
SELECT users.name as User_Name, COUNT(cars.user_id) as Car_Count
FROM users
LEFT JOIN cars
ON users.id=cars.user_id
GROUP BY users.id