Domanda

Ho bisogno di costruire una query con il modello eloquente compresa la clausola condizionale dove.Ho creato qualcosa cercando Google.Ma non sembra funzionare.

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);
.

Questo restituisce tutti i risultati senza il filtraggio dello stato, assegnato a e date.

È stato utile?

Soluzione

L'ho appena aggiornato assegnando $this a una nuova variabile perché quando ho assegnato la query a $this, ha mostrato un errore, $this non può essere scritto.

$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);
.

che funziona perfettamente ora.Ma se qualcuno ha qualche opzione migliore, ti preghiamo di suggerire.Grazie.

Altri suggerimenti

Ho aggiunto una portata al mio modello e chiamalo dal controller.In questo modo il funzionamento del filtro effettivo viene eseguito nel modello, il controller è solo in esecuzione la query attraverso l'ambito del filtro.

Modello:

Sto ricevendo parametri URL con Input::get, ma li passerai anche come parametri di input alla funzione.

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

    return $query;
}
.

Controller:

Qui la query viene eseguita attraverso il filter() prima di restituirlo alla vista.

public function index()
{
    return View::make('articles.index', [
        'articles' => Article::with('writer')->filter()->get()
    ]);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top