2016-11-14 48 views
1

我用下面的代碼,多方法獲取所有相關的模型數據通話使用call_user_func_array

protected $model = ''; 

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

它的工作了,但我如何通過call_user_func_array處理鏈的方法?例如:

我需要取像:

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

一種解決方案是(新的$這個 - >模型) - >其中();我認爲這是一個壞主意。有沒有解決方法?如果您需要調用你可以使用PHP的神奇功能getById getByColumnName方法

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

使用'call_user_func_array([$ this-> model,「get」],[]);'get方法? – Abhishek

+0

在我的BaseRepository我想定義getById或getByColumnName方法,所以我需要連鎖方法,如雄辯 –

回答

0

可以作爲嘗試。

在你的基地倉庫:

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!"); 
    } 
} 

而在你的模型:

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

這不是我的解決方案,我想wrire鏈方法在基地回購,但謝謝 –

+0

你可以發佈你的基地回購和子 - 回購代碼? –

1

+0

我使用baserepository來減少我的模型中的代碼,它不是我的選擇!但是謝謝。 –

0

call_user_func_array使用低級別的呼叫功能,並減少一些問題,這不是我關心的現在,而不是(新$這個模型) - > blob-> blob可以用於正常形式的鏈。我認爲實例化對象具有更好的性能,然後call_user_func_array。