2017-11-18 1 views
1

Ich habeWarum wird meine Laravel-Sammlung nicht korrekt nach Datum gefiltert?

$dt = Carbon::now(); 
    $b4 = Carbon::now()->addWeeks(12); 

    Event::orderBy('date', 'desc') 
    ->where('date', '<', $b4) 
    ->where('ends', '>=', $dt) 
    ->orWhere('date', '>=', $dt) 
    ->take(3) 
    ->get(); 

Alle Filter mit Ausnahme des ersten where arbeiten. Ich habe es zuerst versucht orWhere, kein Würfel. Es zeigt Elemente mit dem Datum im August 2018. Hilfe?

+0

Könnten Sie die SQL-Abfrage schreiben Sie haben möchten? Ich sehe nichts falsch mit den Ergebnissen, die Sie mit diesem Code erhalten. –

+0

Nun in 12 Wochen wäre Februar, August ist außerhalb meiner spezifizierten Reichweite. – user163831

Antwort

0

Ich denke, Sie müssen Ihre Where Queries dh.

$dt = Carbon::now(); 
    $b4 = Carbon::now()->addWeeks(12); 

    Event::orderBy('date', 'desc') 
    ->where(function ($query) use ($dt, $b4) { 
     $query->where('date', '<', $b4->format('Y-m-d')) 
     ->where('ends', '>=', $dt->format('Y-m-d')); 
    }) 
    ->orWhere('date', '>=', $dt->format('Y-m-d')) 
    ->take(3) 
    ->get(); 

https://laravel.com/docs/5.5/queries#parameter-grouping

+0

Lee, was stelle ich der zweiten vor wo Methode (zuerst in der Funktion)? Ich kann nicht einfach laufen (nichts) -> wo – user163831

+0

Sorry, ich hatte einen Tippfehler. Bitte schauen Sie noch einmal. Aber nicht sicher, was du meinst? .. Es gibt keine Frage nichts. Es ist ein Verschluss, um die ersten 2 Where zu gruppieren. Wenn nichts, dann fällt es auf die orWhere Abfrage zurück. – Lee

+0

oh $ query natürlich duh sorry – user163831

Verwandte Themen