1
votes

Variable indéfinie lorsqu'elle est définie

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?


2 commentaires

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


3 Réponses :


0
votes

Remplacer:

 $availableRooms = availableRoom::whereHas('reservation',function($query) use($checkInDate,$checkOutDate) {

par:

 $availableRooms = availableRoom::whereHas('reservation',function($query){


0 commentaires

1
votes

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;

}


0 commentaires

1
votes

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.


0 commentaires