Laravel 5.1 急切加载 - 属于带参数的多


Laravel 5.1 Eager Loading - belongsToMany with parameter

我的模型中有这种关系:

public function modulesData($module) {
    return $this->belongsToMany($module)
        ->withTimestamps();
}

我想要的是急切地加载我的模型的动态关系。但是我该怎么做呢?我使用此代码来急切加载我的关系,但是如何添加参数$module

$model->with(['modulesData'])->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();

("模块名称"是要用作关系参数的模块的名称(。

这样你就可以急切地加载字符串" modulesData_moduleName "。当调用with时,它不会找到该函数,并将回退到__call,这将提取"moduleName"并调用关系"modulesData"作为参数。

我不知道

如何传递参数,但你可以做这样的事情:

$model->with(['modulesData' => function($q) {
    $q->withTimestamps();
}])->get();