2016-07-24 9 views
0

Ich verwende WhereBetween(), um die Ergebnisse pro Woche zu erhalten. Ich lege sie in ein Array, um dieses Array in meiner Ansicht zu durchlaufen und zeige die Datensätze p. Woche.Laravel5.2 erhalten Einträge pro Woche mit WhereBetween & Carbon

Aus irgendeinem Grund scheint die whereBetween() -Abfrage etwas fehlerhaft zu sein.

mein Controller-Code:

$dtStart = Carbon::create(2016, 07, 05, 0); 

$weeks_passed = $dtStart->diffinWeeks(Carbon::now()); 

$payouts = []; 
DB::enableQueryLog(); 

for ($i = 0; $i <= $weeks_passed; $i++) { 

    if ($i == 0) { 

     $payouts = Transaction::where('payed_out', 1)->where('user_id', Auth::user()->id)->whereBetween('updated_at', [$dtStart, $dtStart->addDays(7)])->get(); 
     dd(DB::getQueryLog()); 
    } 
    else 
    { 
     $payouts = Transaction::where('payed_out', 1)->whereIn('user_id', [Auth::user()->id])->whereBetween('updated_at', [$dtStart->addDays($i * 7), $dtStart->addDays(($i + 1) * 7)])->get(); 
    } 

die erste Abfrage Debuggen zeigt beispielsweise die letzten beiden Bindungen für den Datensatz (die beide zwischen denen Parameter) sind beide gleich (2016.07.12 00: 00: 00,000000). Irgendeine Idee, wo etwas schief geht?

+0

Ich mache eine wilde Vermutung hier, aber ich denke, Sie sollten neue Instanz für jedes Datum machen. – TheFallen

Antwort

0

AddDays keine neue Instanz von Carbon- Objekt zurück, das sie modifiziert, um das Objekt auf genannt und gibt das gleiche Objekt. Wenn Sie

[$dtStart, $dtStart->addDays(7)] 

beiden Elemente des Arrays auf das gleiche Objekt zu tun, das ist, warum Sie die gleichen Werte in der Abfrage zu sehen.

Ersetzen das Array oben mit:

[$dtStart, $dtStart->copy()->addDays(7)] 

so dass zwei verschiedene Objekte weitergegeben und AddDays wird auf die Kopie des ursprünglichen Objekts genannt.