我的模特中有这种关系:
public function modulesData($module) {
return $this->belongsToMany($module)
->withTimestamps();
}
我想要的是加载我的模型的动态关系。但是我怎么能这样做呢?
我使用此代码来加载我的关系,但是如何添加参数$module
?
$model->with(['modulesData'])->get();
感谢您的回复。
答案 0 :(得分:1)
请考虑以下事项:
为模型定义回退功能:
public function __call($name, $arguments)
{
if (strpos($name, 'modulesData') !== false) {
$nameArray = explode(' ', $name);
$moduleName = ucfirst($nameArray[1]);
$moduleClass = 'App\Modules\\' . $moduleName . '\\' . $moduleName;
return $this->modulesData($moduleClass);
} else {
return parent::__call($name, $arguments);
}
}
以这种方式使用with
功能:
$tal = \App\Model::with('modulesData ModuleName')->get();
(' ModuleName'您要用作关系参数的模块名称。)
通过这种方式,您可以使用字符串" modulesData_moduleName
"进行预加载。调用with
时,它无法找到该函数,并将回退到__call
,这将提取" moduleName"并呼吁关系" modulesData"用它作为参数。
答案 1 :(得分:0)
我不知道如何传递参数,但你可以做类似的事情:
$model->with(['modulesData' => function($q) {
$q->withTimestamps();
}])->get();