web-dev-qa-db-fra.com

Laravel 5.4 lame pour chaque boucle

Je suis en train de créer un système de gestion des sites, et sur la page de destination, j'essaie de montrer toutes les places disponibles aux visiteurs. Ceux qui ont déjà été réservés sont indiqués comme non disponibles. J'ai créé deux variables, une qui porte les informations de la table de temps et l'autre de la table de réservation et en essayant d'utiliser la lame pour comparer et montrer. Voici comment j'essaye de l'implémenter dans Blade:

@foreach($times as $time)   
 @foreach($bookings as $booking)
    <tr>
        @if($time->availble_times == $booking->booking_time)
            <td>{{$time->availble_times}}: not available</td>
        @else
            <tr><td>{{$time->availble_times}}</td>
        @endif
            </tr>
 @endforeach    
@endforeach 

Mais ce que cela fait à la place, c'est d'afficher tout le temps pour autant d'enregistrements dans le tableau des réservations. Comme s'il y avait deux lignes dans le tableau des réservations, il affiche les heures deux fois, etc. Juste au cas où, voici ma fonction de contrôleur:

 public function times(){
    $times = Times::all();
    $bookings = Bookings::all();
    return view('/test2')->with('times', $times)->with('bookings', $bookings);
}

J'ai récemment commencé à faire Laravel et je ne peux pas comprendre ce problème. Ma question est, comment puis-je résoudre le problème d'affichage n-times et montrer à l'utilisateur quelles heures sont réservées et lesquelles sont disponibles?

7

Je ne sais pas à quoi ressemblent vos données, mais en regardant vos colonnes de code availble_times et booking_time sont des champs de date. Si le modèle Times est un dictionnaire pour les heures (comme 1. 8.00, 2. 8:45, 3. 9:00), et que l'heure de réservation doit être dans les enregistrements Times, il vous suffit d'inverser les boucles pour les afficher à chaque fois réservation

@foreach($bookings as $booking)
    @foreach($times as $time)
        <tr>
            <td>{{ getImaginedChairNumber() }}</td>
            <td>{{ $time->availble_times }}</td>
            @if($time->availble_times == $booking->booking_time)
                {{-- There is already booking for that dictionary time --}}
                <td>not available</td>
            @else
                <td>available</td>
            @endif
        </tr>
    @endforeach
@endforeach

Devrait produire un tableau similaire:

╔═══════╦══════╦═══════════════╗
║ Chair ║ Time ║    Booking    ║
╠═══════╬══════╬═══════════════╣
║ A1    ║ 8:00 ║ not available ║
║ A1    ║ 8:45 ║ available     ║
║ A1    ║ 9:00 ║ not available ║
║ A2    ║ 8:00 ║ not available ║
║ A2    ║ 8:45 ║ not available ║
║ A2    ║ 9:00 ║ not available ║
║ A3    ║ 8:00 ║ available     ║
║ A3    ║ 8:45 ║ available     ║
║ A3    ║ 9:00 ║ not available ║
╚═══════╩══════╩═══════════════╝

Est-ce la forme correcte de la table de sortie que vous attendez? (J'ai utilisé cet outil pour dessiner une table ascii https://senseful.github.io/web-tools/text-table/ )

14