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"。