2017-05-28 1 views
1

Ich habe eine Tabelle, die Ereignisse darstellt, von denen jede eine Kündigungsfrist hat, z. Sie können die Veranstaltung nicht buchen, wenn sie sich weniger als 24 Stunden vor der Veranstaltung befindet.Laravel wo mit Carbon AddMinutes nicht funktioniert

Ich versuche, einen 'buchbaren' Bereich dafür zu erstellen, aber scheitern. Im folgenden Beispiel steht "Zeit" für die Zeit des Ereignisses (Zeitstempel) und "Notiz" für den Hinweiszeitraum in Minuten (Ganzzahl), wobei es sich bei beiden um Spalten im Ereignismodell handelt. Was ich gefunden habe, ist, dass Laravel die Variable 'notice' nicht liest, d. H. Sie als 0 behandelt. Jede Anleitung wäre willkommen, danke.

public function scopeBookable($q) { 
    $q->where('time','>',Carbon::now()->addMinutes('notice'))->orderBy('time','ASC')->get(); 
} 

Antwort

4

Die Methode addMinutes() erwartet eine Ganzzahl, keine Zeichenfolge.

Scope Option

Sie die Mitteilung Zeit bis zum Umfang passieren kann.

// Controller 
$notice = 60; 
Events::bookable($notice); 

// Model 
public function scopeBookable($q, $notice=0) { 
    $q->where('time','>',Carbon::now()->addMinutes($notice))->orderBy('time','ASC')-get(); 
} 

Kollektion Option

Sie immer eine Selbstverknüpfung in SQL ausführen kann und den Wert von notice in einer Unterabfrage überprüfen. Eine andere Option besteht darin, eine gefilterte eloquente Sammlung zurückzugeben.

public function scopeBookable() { 
    return Events::all()->filter(function($event) { 
     return $event->time > Carbon::now()->addMinutes($event->notice) 
    }); 
} 
+0

Die 'notice' Spalte ist in der Tat eine ganze Zahl. Z.B. Wenn ich addMinutes woanders mit 'notice' benutze, funktioniert es nur aus irgendeinem Grund, wenn es Teil von queryScope ist, wird die Variable 'notice' nicht richtig aufgenommen. – user6122500

+0

@ user6122500 das könnte sein, aber Cabon weiß nichts über Ihre DB-Spalten. –

+0

Danke. Aber "notice" ist eine Variable, die tatsächlich von Ereignis zu Ereignis variiert. Z.B. Event A hat möglicherweise 10 Minuten Vorlaufzeit, Event B kann 60 Minuten haben. Wie können wir das unterbringen? (Es scheint mir, dass innerhalb der Abfrage-Bereich, sobald der 'Hinweis' in der Where-Klausel in eine Funktion eingewickelt ist es nicht mehr richtig erkannt wird) – user6122500

Verwandte Themen