如果不存在相关模型,Laravel仅删除模型

时间:2015-12-07 14:38:10

标签: php laravel laravel-5 eloquent

假设我有一个名为“制造商”的模型,这个模型与另一个模型“车辆”有一对多关系。现在我不想让用户删除制造商,如果有任何车辆与此车型相关联。

//In Manufacturer model

public function vehicles()
{
    return $this->hasMany('Vehicle');
}

在存储库/控制器中,我有另一种方法来检查它。

public function checkAssociatedVehicles($id)
{
    return Manufacturer::with('vehicles')->find($id)->toJson();
}

这确实输出了所有相关车辆的制造商数据。但这效率不高,所以我只想检查是否有一辆车,然后不要删除制造商。

4 个答案:

答案 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');