选择laravel中没有条件相关记录的记录

时间:2018-06-07 16:21:41

标签: laravel laravel-5.6

我有两种型号房间和预订。

模型如下:

class Room extends Model {
 public function bookings() {
  return $this->hasMany(Booking::class);
 }
}

class Booking extends Model {
 public function room() {
  return $this->belongsTo(Room::class);
 }
}

我想使用laravel的雄辩来选择所有在指定日期没有预订的房间,比如2018-06-07。

我尝试了以下内容:

$available_rooms = Room::whereHas('bookings', function($query) {
 $query->where('date', '!=', '2018-06-07');
})->get();

但是,这只会返回有预订的房间而不是那些根本没有预订的房间。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用doesntHave()

$available_rooms = Room::doesnthave('bookings','or' ,function($query) {
 $query->where('date', '!=', '2018-06-07');
})->get();

它将返回当天未预订的房间。

有关详细信息,您可以https://laravel.com/api/5.4/Illuminate/Database/Eloquent/Builder.html#method_doesntHave

希望这有帮助。

答案 1 :(得分:0)

您可以使用doesntHave

$available_rooms = Room::doesntHave('bookings', function($query) {
    $query->where('date', '!=', '2018-06-07');
})->get();