假设我有一个名为“制造商”的模型,这个模型与另一个模型“车辆”有一对多关系。现在我不想让用户删除制造商,如果有任何车辆与此车型相关联。
//In Manufacturer model
public function vehicles()
{
return $this->hasMany('Vehicle');
}
在存储库/控制器中,我有另一种方法来检查它。
public function checkAssociatedVehicles($id)
{
return Manufacturer::with('vehicles')->find($id)->toJson();
}
这确实输出了所有相关车辆的制造商数据。但这效率不高,所以我只想检查是否有一辆车,然后不要删除制造商。
答案 0 :(得分:4)
我相信您希望使用has
方法来确保制造商拥有一些车辆。
$manufacture = Manufacturer::has('vehicles')->find($id);
然后您只想确保!is_null($manufacture)
答案 1 :(得分:2)
由于您的制造商型号中有vehicles()
方法,您可以这样做:
使用whereDoesntHave
方法过滤所有没有车辆的制造商,然后再删除它们:
Manufacturer::whereDoesntHave('vehicles')->get();
来自API:
向具有where子句的查询添加关系计数条件。
答案 2 :(得分:0)
您可以返回这样的总车辆数:
return [
'count' => Manufacturer::with('vehicles')->find($id)->count()
];
现在你可以检查一下。
答案 3 :(得分:0)
这将返回布尔值,表明制造商是否有车辆。
return (Manufacturer::with([
'vehicles'=> function($query){
return $query->limit(1);
}])->find($id)->vehicles);
您可以在车辆上添加外键和主键,以减少查询性能问题的列数。
return $query->limit(1)->select('id','manufacturer_id');