2017-07-12 15 views
0

現在、配列で定義されたモデルでscopeByLocation()またはscopeByPublished()などの異なるscopeQueryを呼び出す関数を作成しようとしています。私は[このリンク] [1]を通して働いている基礎を持っています。ただし、対応するモデルで定義されたカスタム作成のクエリスコープにアクセスしようとすると、次のエラーが発生します。"Call to undefined method Illuminate\Database\Query\Builder::ForLocation($location)->get()"。私が達成したい何Eloquentモデルの配列に対するLaravel動的クエリ

は、モデルの配列内のすべてのモデルをループし、単一の方法で、&がモデル上で右scopeQueryを呼び出して取得し、このような何か:

$modelElements = $model::{$queryScope}(); 

どこ例えば$model = 'Modules\News\Models\Article'

$queryScopeは、モデル自体で定義されたqueryScopeです。例えば。 scopeForLocation($location)

私は$queryScope = 'all'をテストしましたが、結果はうまくいきましたが、たとえばLocationモデル内に存在するカスタムqueryScope($queryScope = 'ForLocation($location)->get')にアクセスしようとすると、次のエラーが発生します。"Call to undefined method Illuminate\Database\Query\Builder::ForLocation($location)->get()"

これはforeach-loopで起こります。このモデルでは、モデル配列のすべてのモデルが呼び出され、対応するqueryScopeがモデルで呼び出されます。

$queryScope = 'all'メソッドは動的モデルでは機能しますが、他のスコープではエラーが発生するのはなぜですか?私は本当に誰かがこの問題で正しい方向へ進むのを助けてくれることを願っています。

ありがとうございます。

J. Doe

//array of models 
public function models() 
{ 
    return [ 
     'Modules\Website\Models\Article', 
     ... 
     ]; 
} 

//function that retrieves all elements for a model 
public function getAllElementsForModel($model, $param) 
{ 
    //instantiate model 
    $model = new $model; 

    //call queryScope 
    //'queryScope' could be any queryScope that is defined within your model(s), 
    //the parameters are needed for the associated queryScope 
    $query = call_user_func_array([$model, 'queryScope'], [$param1, $param2]); 

    $result = $query->get(); 

    //do stuff with your $result 
} 


//retrieves all 
public function all($param) 
{ 
    //loop through the array of models 
    foreach($this->models() as $model){ 

     $this->getAllElementsForModel($model, $param); 
     //do stuff here... 
    } 
} 

共有は思いやりのある:

答えて

0

さて、私は最終的にそれを次のように解決してきました!

関連する問題