Выберите записи, у которых нет связанной записи с условием в laravel - PullRequest
0 голосов
/ 07 июня 2018

У меня есть две модели Room и Booking.

Модели следующие:

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 голосов
/ 07 июня 2018

Вы можете использовать не имеет

$available_rooms = Room::doesntHave('bookings', function($query) {
    $query->where('date', '!=', '2018-06-07');
})->get();
0 голосов
/ 07 июня 2018

Вы можете использовать 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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...