Laravel 5.1 预先加载 - 带有参数的 belongsToMany
Laravel 5.1 Eager Loading - belongsToMany with parameter
我的模型中有这种关系:
public function modulesData($module) {
return $this->belongsToMany($module)
->withTimestamps();
}
我想要的是预先加载模型的动态关系。但是我该怎么做呢?
我使用此代码来预加载我的关系,但如何添加参数 $module
?
$model->with(['modulesData'])->get();
感谢回复。
我不知道如何传递参数,但你可以这样做:
$model->with(['modulesData' => function($q) {
$q->withTimestamps();
}])->get();
考虑以下因素:
为您的模型定义回退函数:
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"。
我的模型中有这种关系:
public function modulesData($module) {
return $this->belongsToMany($module)
->withTimestamps();
}
我想要的是预先加载模型的动态关系。但是我该怎么做呢?
我使用此代码来预加载我的关系,但如何添加参数 $module
?
$model->with(['modulesData'])->get();
感谢回复。
我不知道如何传递参数,但你可以这样做:
$model->with(['modulesData' => function($q) {
$q->withTimestamps();
}])->get();
考虑以下因素:
为您的模型定义回退函数:
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"。