避免查询以检查Laravel中是否存在关系

时间:2018-03-07 11:16:19

标签: php laravel-5 eloquent

在Laravel中我有2个模型ManCarCar模型有一个外键man_id

现在我想检查Car是否有所有者,所以我可以做 if($car->man != null)

我也可以这样做:
if($car->man_id != null)
但我不喜欢这个解决方案...

但是通过这种方式,Laravel会查询是否存在Man,是否有办法避免这种无用的查询?

1 个答案:

答案 0 :(得分:0)

您可以在Car模型上创建一个新功能,以检查其所有者。

Car.php

class Car extends Model {

   public function hasOwner()
   {
      return empty($this->man_id); // returns boolean
   }
}

然后,你可以做到

$car = Car::first();
if ($car->hasOwner()) { ... }

更新:

您还可以使用exists()方法

$car->man()->exists(); // bool: true if there is at least one row

从Laravel 5.5或更高版本开始,您还可以使用doesntExist()来确定当前查询中是否没有行。

$car->man()->doesntExist(); // bool: true if no row exists