使用 laravel eloquent 关系的 GroupBy
GroupBy from relations using laravel eloquent
我有 TypeOfVehicle
个模型,其中有很多 Vehicle
。
我如何按车辆名称类型对所有车辆进行计数以获得类似这样的结果
[
'Sedan' => 10,
'SUV' => 25,
'Crossover' => 5
]
您可以使用
$counts = DB::table('tablename')
->select('TypeOfVehicle', DB::raw('count(*) as total'))
->groupBy('TypeOfVehicle')
->get();
统计相关模型
如果您想计算一个关系的结果数量而不实际加载它们,您可以使用 withCount
方法,该方法会在您的结果模型上放置一个 {relation}_count
列。
$typeOfVehicles = App\TypeOfVehicle::withCount('vehicles')->get();
foreach ($typeOfVehicles as $typeOfVehicle) {
echo $typeOfVehicle->vehicles_count;
}
试试这个,它会为您提供解决方案
$vehicle=Vehicle::all();
$grouped = $vehicle->groupBy(function ($item, $key) {
return substr($item['that_coloumn_name_like_type'], 0);
});
$groupCount = $grouped->map(function ($item, $key) {
return collect($item)->count();
});
//dd($groupCount); to check it work correctly
我假设您在 Vehicle
模型中有 eloquent 关系 type
,例如:
public function type()
{
return $this->belongsTo('\App\TypeOfVehicle');
}
因此,您可以通过以下方式获取数据:
$result = Vehicle::select('vehicle_type_id', DB::raw('count(vehicle_type_id) as cnt'))
->with('type') // with your type relation
->groupBy('vehicle_type_id') // group by type of vehicle
->get() // get collection from database
->pluck('cnt', 'type.name') // get only needful data
->toArray(); // cast to array if necessary
我有 TypeOfVehicle
个模型,其中有很多 Vehicle
。
我如何按车辆名称类型对所有车辆进行计数以获得类似这样的结果
[
'Sedan' => 10,
'SUV' => 25,
'Crossover' => 5
]
您可以使用
$counts = DB::table('tablename')
->select('TypeOfVehicle', DB::raw('count(*) as total'))
->groupBy('TypeOfVehicle')
->get();
统计相关模型
如果您想计算一个关系的结果数量而不实际加载它们,您可以使用 withCount
方法,该方法会在您的结果模型上放置一个 {relation}_count
列。
$typeOfVehicles = App\TypeOfVehicle::withCount('vehicles')->get();
foreach ($typeOfVehicles as $typeOfVehicle) {
echo $typeOfVehicle->vehicles_count;
}
试试这个,它会为您提供解决方案
$vehicle=Vehicle::all();
$grouped = $vehicle->groupBy(function ($item, $key) {
return substr($item['that_coloumn_name_like_type'], 0);
});
$groupCount = $grouped->map(function ($item, $key) {
return collect($item)->count();
});
//dd($groupCount); to check it work correctly
我假设您在 Vehicle
模型中有 eloquent 关系 type
,例如:
public function type()
{
return $this->belongsTo('\App\TypeOfVehicle');
}
因此,您可以通过以下方式获取数据:
$result = Vehicle::select('vehicle_type_id', DB::raw('count(vehicle_type_id) as cnt'))
->with('type') // with your type relation
->groupBy('vehicle_type_id') // group by type of vehicle
->get() // get collection from database
->pluck('cnt', 'type.name') // get only needful data
->toArray(); // cast to array if necessary