Php 雄辩的:现有记录的计数

Php 雄辩的:现有记录的计数,php,laravel,eloquent,Php,Laravel,Eloquent,我只是想知道在拉雷维尔是否有办法返回一张记录存在多少次的次数 我有两张桌子: 汽车和品牌 汽车有de字段:id,brand\u id。品牌有de字段:id,name。关系取决于cars.brand\u id=brands.id 我把文件弄红了,找不到解决办法 有没有办法让我知道一辆车使用一个品牌多少次,这样我就可以得到这样的计数: Suzuki: 2<br> Opel: 4 <br> BMW: 1<br> etc. Brand::where('name',

我只是想知道在拉雷维尔是否有办法返回一张记录存在多少次的次数

我有两张桌子: 汽车和品牌

汽车有de字段:
id
brand\u id
。品牌有de字段:
id
name
。关系取决于
cars.brand\u id=brands.id

我把文件弄红了,找不到解决办法

有没有办法让我知道一辆车使用一个品牌多少次,这样我就可以得到这样的计数:

Suzuki: 2<br>
Opel: 4 <br>
BMW: 1<br>
etc.
Brand::where('name', 'Suzuki')->cars->count();
铃木:2
欧宝:4
宝马:1辆
等 您可以尝试查询:

SELECT count(brands.name), brands.name
FROM cars
JOIN brands ON cats.brand_id = brands.id
使用等价物进行雄辩

DB::table('cars')
->select(DB::raw('COUNT(brands.name), brands.name')
->join('brands', 'brands.id', '=', 'cars.id')
->groupBy('brands.name')
->get();
您应该创建一个关系,然后在查询中进行计数

class Brand {

public function cars() {
    return $this->belongsToMany('App\Car', 'brand_id', 'id');
}
}
然后像这样使用它:

Suzuki: 2<br>
Opel: 4 <br>
BMW: 1<br>
etc.
Brand::where('name', 'Suzuki')->cars->count();
在品牌模型内部实现这一点的最好方法是使用聚合:


如果您有合适的型号,您可以这样做:

$brands = Brands::with(cars)->get();

    foreach ( $brands as $brand){
        $yourarray[$brand->name]= count($brand->cars);
    }

dd($yourarray);

这将为您提供一个很好的汽车品牌和数量数组

我已经创建了该函数,但我得到的信息是[cars]不存在?如果您在模型中声明该函数(
public function cars()
),这应该会起作用。重要的是模型的名称空间是正确的。当然,请先检查。