'How can i get the box id when querying a many to many relation in laravel?

I'm building a smart lockers building system and I'm just facing an issue that i don't really know how to solve.

Let me explain, my db for this particular operation has 3 tables that are interested, where one is a pivot table:

  • box
  • reservations
  • box_reservation

Between box and reservations there's a many to many relation because :

  • one box belongsToMany reservations
  • one reservation can belongToMany boxes

When checking availability i need to return the box_id that are booked for the period requested so that, if there's availability, I can later assign a new box id to the newly made reservation.

Following there's the code in my controller, the function create() is called when submitting the check availability form, while the store() is to create the instances.

        //Controllo la disponibilità dei box per le date e gli orari richiesti e prendo gli ID dei box prenotati nel periodo
        $reservedBoxId = Reservation::orWhere(function ($q1) use ($beginningDateTime, $endDateTime) {
           $q1->where('beginning_date_time', '>=', $beginningDateTime )
              ->where('beginning_date_time', '<=', $endDateTime);

        })
        ->orWhere(function ($q2) use ($beginningDateTime, $endDateTime) {
           $q2->where('end_date_time', '>=', $beginningDateTime )
              ->where('end_date_time', '<=', $endDateTime);
        })
        ->orWhere(function ($q3) use ($beginningDateTime, $endDateTime) {
           $q3->where('beginning_date_time', '>=', $beginningDateTime)
              ->where('end_date_time', '<=', $endDateTime);
        })
        ->orWhere(function ($q4) use ($beginningDateTime, $endDateTime) {
           $q4->where('beginning_date_time', '<=', $beginningDateTime)
              ->where('end_date_time', '>=', $endDateTime);
        })
        ->select('box_id')->get()->pluck('box_id');//I tried to do, but OBVIOUSLY, it doesn't work because that column is not inside the reservation table.

        

The problem with the code is in the create() method when querying the DB.

The problem is, being the box_id in a different table, how do I get the box_id tied to the reservations already active in that period???

Does anybody have an idea?

Thank you



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source