我目前正在尝试在数组中定义的模型上创建一个调用不同scopeQueries的函数,例如scopeByLocation()
或scopeByPublished()
。我已经通过[此链接] [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循环中,我的模型数组中的每个模型都被调用,然后在模型上调用相应的queryScope。
为什么$queryScope = 'all'
方法适用于我的动态模型,但其他范围会引发错误?我真的希望有人可以帮我解决这个问题。
提前致谢,
学家DOE。
答案 0 :(得分:0)
好的,我终于通过以下方式解决了它:
//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...
}
}
分享是关怀!