繁体   English   中英

雄辩模型数组上的Laravel动态查询

[英]Laravel dynamic queries on array of Eloquent models

我目前正在尝试制作一个函数,该函数在数组中定义的模型上调用不同的scopeQueries,例如scopeByLocation()scopeByPublished() 我已经通过[this link] [1]了解了基础知识。 但是,当尝试访问在相应模型中定义的定制查询范围时,出现以下错误: "Call to undefined method Illuminate\\Database\\Query\\Builder::ForLocation($location)->get()"

我要实现的是一个单一方法,该方法循环遍历模型数组中的每个模型,并检索和调用模型上的正确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循环中,在该循环中,将调用我的models-array中的每个模型,然后在该模型上调用相应的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...
    }
}

分享是关怀!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM