2016-05-05 4 views
2

I Liste der Buchungen in einer Tabelle haben, und ich habe eine andere Tabelle Flecken, die das Ereignis Informationen, zB: Datum, Tag, event_name, Preis, Dauer etc ..Erhalten Tage mit Null Gesamt Buchungen auch in Laravel

Ich muss gruppierenBy Buchungen über Tage, die funktioniert gut, aber das Problem kommt, wenn es Spots ohne Buchungen gibt und meine Join-Abfrage stimmt Spots und Buchungen Tabelle, aber wenn es keine Buchungen für einen bestimmten Ort dann schlägt die Groupby für diesen bestimmten Tag.

Beispiel: Ich habe am Mo, Di und Mi Spots. Wenn es keine Buchungen für Montag gibt, bekomme ich keine Totalbuchung mit Null. Ich bekomme nichts für diesen Tag. Kurz gesagt, es existiert nicht. Warum brauche ich denn: Ich habe einen Fortschrittsbalken auf Front-End, der keine zeigt. von Buchungen für jeden Tag, also wenn keine Buchungen für einen bestimmten Tag ich am Ende keine Fortschrittsbalken.

Controller:

//This query does not return bookings for tuesday because I dont have bookings. 
$days = DB::table('spots') 
     ->join('bookings','spots.id','=','bookings.spot_id') 
     ->where('spots.event_id','=',$id) 
     ->select('day',DB::raw('count(bookings.spot_id) as bookingcount')) 
     ->groupby('spots.day') 
     ->get(); 

Ausblick:

screenshot of the days progress bar, tuesday is not shown

@foreach($days as $day) 
<div class="col-sm-6 col-md-3"> 
    <div class="tablet tablet-stat"> 
     <h4 class="tablet-header">{{ $day->day }}</h4> 
     <div id="circle"> 
       <div class=" c100 p{{round(($day->bookingcount/$totalspace->totalspace)*100,0)}}"> 
        <span> {{ round(($day->bookingcount/$totalspace->totalspace)*100,2) }} </span> 
        <div class="slice"> 
         <div class="bar"></div> 
         <div class="fill"></div> 
        </div> 
       </div> 
      </div> 
    </div> 
</div> 
@endforeach 

ich wirklich nicht für einen Hack suchen, wie einfach den Tag finden, die keine Buchungen hat und eine andere foreach-Schleife erstellen um diese Tage ohne Buchungen anzuzeigen. Ich ziehe es vor, in meiner Abfrage als null zu zählen.

Antwort

1

es so versuchen:

$days = DB::table('spots') 
      ->leftJoin('bookings','spots.id','=','bookings.spot_id') 
      ->where('spots.event_id','=',$id) 
      ->select('day',DB::raw('count(bookings.spot_id) as bookingcount')) 
      ->groupby('spots.day') 
      ->get(); 

* die vorherige Antwort korrigiert, nicht viel Sinn

Eine äußere gemacht hat beitreten sollte das tun, was Sie wollen.

+0

Es tritt ein Fehler auf: SQLSTATE [HY000]: Allgemeiner Fehler: 1111 Ungültige Verwendung der Gruppenfunktion (SQL: wähle 'Tag', Summe (Anzahl (bookings.spot_id)) als bookingcount von' Spots' innere Verknüpfung 'Buchungen' auf 'spots'.id' =' bookings'.spot_id' wo 'spots'.event_id' = 1 Gruppe nach' spots'.Tag) –

+0

Warum die Anzahl (Buchungen) trotzdem summieren? es würde zu einem einzigen Wert für mehrere Zeilen führen. –

+0

Ok es funktioniert danke –

Verwandte Themen