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