Исправить Laravel Присоединиться с датой исправить - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть две таблицы данных. Одна - это транспортные средства, а другая - бронирование. Я выбираю транспортные средства из таблицы транспортных средств для бронирования при бронировании. Теперь я хочу проверить состояние забронированных и доступных транспортных средств, но я получаю транспортные средства, когда они забронированы в имеющемся статусе. Я обновляю решенный код.

$ date = '2018-11-14';

  $data = DB::table('vehicles')
     ->select('bookings.*', 'vehicles.*')
     ->Join('bookings', function($query) use ($date) {
          $query
              ->on ('bookings.vehicle_id', '!=', 'vehicles.id')
              ->where('eventDate', '=', $date);
      })
      ->get();

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вам нужно разделить запросы.

Бронирования:

$booked = DB::table('vehicles')
   ->select('bookings.*', 'vehicles.*')
   ->join('bookings', function($query) use ($date) {
        $query
            ->on('bookings.vehicle_id', '=', 'vehicles.id')
            ->where('date', '=', $date);
    })
    ->get();

Доступно:

$available = DB::table('vehicles')
    ->whereNotExists(function($query) use ($date) {
       $query
           ->select(DB::raw(1))
           ->from('bookings')
           ->whereRaw('bookings.vehicle_id = vehicle.id')
           ->where('bookings.event_date','=', $date);
    })
    ->get();

Изменение возврата:

return view('bookings.status', compact('available', 'booked'));

И используйте $ available и $ booked вместо одной переменной данных в вашем представлении.

OR

Получить все данные в одном запросе.

$data = DB::table('vehicles')
->select('bookings.*', 'vehicles.*')
->leftJoin('bookings', function($query) use ($data) {
    $query
        ->on('bookings.vehicle_id', '=', 'vehicle.id')
        ->where('date', '=', $date);
})
->get();

И, например, проверить наличие пустого «event_date».

Доступно:

@foreach($data as $row)
    @if(!$row->event_date)
        ...table row...
    @endif
@endforeach

Бронирования:

@foreach($data as $row)
    @if($row->event_date)
        ...table row...
    @endif
@endforeach
0 голосов
/ 15 ноября 2018

Вы должны попробовать это:

$data =DB::table('vehicles')
              ->join('bookings','bookings.vehicle_id', '!=', 'vehicles.id')
              ->select('bookings.*', 'vehicles.*')
              ->whereDate('bookings.event_date','=', $date)
              ->get();
0 голосов
/ 15 ноября 2018

используется правое соединение

$date = '2018-11-12';

  $data =DB::table('bookings')
              ->rightJoin('vehicles','vehicles.id','!=', 'bookings.vehicle_id')
              ->select('bookings.*', 'vehicles.*')
              ->where('bookings.event_date',$date)  //for date used where
              ->orWhereNull('bookings.event_date')   //if your bookings table is empty then add orWhereNull condition to get all rows...
              ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...