Frage

Ich muss eine Abfrage mit einem eloquenten Modell einschließlich der bedingten Where-Klausel erstellen.Ich habe durch eine Google-Suche etwas erstellt.Aber es scheint nicht zu funktionieren.

if ($status) {
    $this->where('status', $status);
}
if ($assignedto) {
    $this->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
    $this->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $this->orderBy('date', 'desc')->paginate(40);

Dieser gibt alle Ergebnisse ohne Filterung nach Status, Zuweisung und Datum zurück.

War es hilfreich?

Lösung

Ich habe es gerade durch Zuweisen aktualisiert $this zu einer neuen Variablen, weil ich die Abfrage zugewiesen habe $this, es zeigte einen Fehler, $this kann nicht überschrieben werden.

$quoteModel = $this;
if ($status) {
    $quoteModel = $quoteModel->where('status', $status);
}
if ($assignedto) {
    $quoteModel = $quoteModel->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
    $quoteModel = $quoteModel->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $quoteModel->orderBy('date', 'desc')->paginate(40);

was jetzt perfekt funktioniert.Aber wenn jemand eine bessere Option hat, schlagen Sie es bitte vor.Danke.

Andere Tipps

Ich habe meinem Modell einen Bereich hinzugefügt und ihn über den Controller aufgerufen.Auf diese Weise wird die eigentliche Filterarbeit im Modell erledigt, der Controller führt lediglich die Abfrage durch den Filterbereich aus.

Modell:

Ich erhalte URL-Parameter mit Input::get, aber Sie würden sie auch als Eingabeparameter an die Funktion übergeben.

public function scopeFilter($query)
{
    $published = Input::get('published');
    if (isset($published)) $query->where('published', '=', $published);

    return $query;
}

Regler:

Hier wird die Abfrage durchlaufen filter() bevor Sie es zur Ansicht zurückbringen.

public function index()
{
    return View::make('articles.index', [
        'articles' => Article::with('writer')->filter()->get()
    ]);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top