2016-11-14 13 views
1

i Code unten verwenden, um alle relevanten Daten Modell für jetztAufruf mehrere Verfahren unter Verwendung von call_user_func_array

protected $model = ''; 

public function getAll() 
{ 
    return call_user_func_array([$this->model, "get"], []); 
} 

seine Arbeit zu holen, aber wie kann ich Kette Methode von call_user_func_array umgehen? zum Beispiel:

ich brauche zu holen wie:

Model::where('user_id', $user_id)->get(); 

eine Lösung (neu $ this-> Modell) ist -> where(); dass ich denke, es ist eine schlechte Idee. Gibt es eine Lösung?

+0

Grund für die Verwendung von 'call_user_func_array ([$ this-> model," get "], []);' für get Methode? – Abhishek

+0

in meinem BaseRepository ich möchte definieren getById oder getByColumnName mthod, so muss ich Methoden wie redegewandte –

Antwort

0

können Sie versuchen, wie:

$modelName = $this->model; 
$modelName::where('user_id', $user_id)->get(); 
+0

dies ist nicht meine Lösung, ich möchte wrire Kette Methode in Base-Repo, aber danke –

+0

Können Sie Ihre Basis-Repo und Kind- Repo-Code? –

1

Wenn Sie getById getByColumnName Methoden aufrufen müssen Sie PHP Magic-Funktion nutzen können.

In Ihrer Basis-Repository:

public function __call($method, $parameters) 
{ 
    if(startsWith($method, 'getBy')) 
    { 
     return $this->model->findBy(snake_case(substr($method, 6)), $parameters[0]); 
    } 
    else 
    { 
     throw new Exception("$method not found!"); 
    } 
} 

Und in Ihrem Modell:

public function getBy($column, $value) 
{ 
    try 
    { 
     return User::where($column, $value)->first(); 
    } 
    catch(Exception $e) 
    { 
     throw new Exception("Model Not Found"); 
    } 
} 
+0

Ich verwende das Basisrepository, um den Code in meinen Modellen zu reduzieren, es ist nicht meine Entscheidung! aber danke. –

0

für geringe Anruffunktion nutzen call_user_func_array und einige Frage zu reduzieren, die nicht meine Sorge um jetzt, statt (neu $ Dieses Modell) -> Blob-> Blob kann für die Kette in normaler Form verwenden. und ich denke, instanziieren Objekt haben eine bessere Leistung als call_user_func_array.

Verwandte Themen