加入数据库和计数

时间:2014-12-11 17:13:00

标签: php mysql laravel laravel-4 eloquent

我正在尝试列出有关表格的信息,其中一个信息是用户拥有的汽车数量。我有两个数据库,一个是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();

3 个答案:

答案 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

enter image description here