2016-05-04 16 views
1

Ist es möglich, einen benutzerdefinierten Abfrage-Generator in einem Modell zu erstellen und die Abfrage zurückzugeben? Kein stressiges Problem, wäre aber hilfreich.Benutzerdefinierte Abfrage Builder Laravel

/* Controller */ 

public function getOrders() 
{ 
    $orders = \App\Order::where('is_new', 1)->getFromUserStore(); 
} 

/* Order Model */ 

public function getFromUserStore() 
{ 
    if(\Auth::user()->store->id == 1) 
    { 
     return $this->get(); 
    } 
    else 
    { 
     return $this->where('status_id', 1)->get(); 
    } 
} 

Dank

+0

Es ist Teil Ihrer Frage per se, aber ich schlage vor, Sie die 'use' Operator für Ihren Namensraum den umgekehrten Schrägstrich die ganze Zeit zu vermeiden, verwenden verwenden. Für Ihren Controller sollten Sie 'App \ Order;' verwenden und für Ihr Modell 'Illuminate \ Support \ Facades \ Auth;' – Wistar

+0

@Wistar verwenden, verwende ich normalerweise 'use'. Gibt es ein Leistungsproblem bei der Verwendung des Backslash? Danke für die Eingabe. – Bri

+0

Ich weiß nicht über Leistungsproblem. Funktioniert die Antwort? – Wistar

Antwort

3

Ich glaube, Sie suchen Query Scope

Scopes ermöglicht es Ihnen, gemeinsame Sätze von Einschränkungen zu definieren, die Sie während Ihrer Anwendung leicht wiederverwenden kann.

/* Controller */ 
public function getOrders() 
{ 
    $orders = \App\Order::where('is_new', 1)->getFromUserStore()->get(); 
} 


/* Order Model */ 
public function scopeGetFromUserStore($query) 
{ 
    if(\Auth::user()->store->id == 1) 
    { 
     return $query; 
    } 
    else 
    { 
     return $query->where('status_id', 1); 
    } 
} 
+0

Genau das, was ich suche. Vielen Dank. – Bri