[英]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.