J'obtiens toujours cette erreur Variable non définie: checkInDate quand je la définis déjà.
public function checkAvailable(Request $request){ $checkInDate = date("Y-m-d", strtotime($request->start_date)); $checkOutDate = date("Y-m-d", strtotime($request->end_date)); $availableRooms = availableRoom::whereHas('reservation',function($query){ $query->where(function($query){ $query->whereDate('reservationDate', '>=', $checkInDate); $query->whereDate('reservationDate', '<=', $checkOutDate); })->orWhere(function($query){ $query->whereDate('expiryDate', '>=', $checkInDate); $query->whereDate('expiryDate', '<=', $checkOutDate); }); })->get(); return $availableRooms; }
Le checkInDate a déjà une valeur. Est-ce que je rate quelque chose?
3 Réponses :
Remplacer:
$availableRooms = availableRoom::whereHas('reservation',function($query) use($checkInDate,$checkOutDate) {
par:
$availableRooms = availableRoom::whereHas('reservation',function($query){
Vous devez avoir un use () ajouté à chaque fonction afin que la variable soit accessible à la fonction sinon elle n'a accès qu'aux variables qui sont passées.
public function checkAvailable(Request $request){ $checkInDate = date("Y-m-d", strtotime($request->start_date)); $checkOutDate = date("Y-m-d", strtotime($request->end_date)); $availableRooms = availableRoom::whereHas('reservation',function($query) use ($checkInDate, $checkOutDate) { $query->where(function($query) use ($checkInDate, $checkOutDate){ $query->whereDate('reservationDate', '>=', $checkInDate); $query->whereDate('reservationDate', '<=', $checkOutDate); })->orWhere(function($query) use ($checkInDate, $checkOutDate){ $query->whereDate('expiryDate', '>=', $checkInDate); $query->whereDate('expiryDate', '<=', $checkOutDate); }); })->get(); return $availableRooms; }
Puisque vous essayez d'accéder à la variable dans un callback, vous devez passer la variable au callback avec l'instruction use
.
public function checkAvailable(Request $request){ $checkInDate = date("Y-m-d", strtotime($request->start_date)); $checkOutDate = date("Y-m-d", strtotime($request->end_date)); $availableRooms = availableRoom::whereHas('reservation',function($query)use($checkInDate, $checkOutDate){ ... });
Puisque vous essayez également de utilisez $ checkOutDate
, vous devrez également le transmettre au rappel, en le séparant par une virgule.
Vous devez ajouter
use ($ checkInDate, $ checkOutDate)
à la fonction anonyme:..whereHas ('reservation', function ($ query) use ($ checkInDate, $ checkOutDate) {. ..
$ CheckInDate et $ checkOutDate reçoivent la même erreur Variable non définie