Laravel 5.1 Eager Loading - belongsToMany with parameter

时间:2015-12-16 09:37:11

标签: php orm laravel-5.1 relationship has-and-belongs-to-many

我的模特中有这种关系:

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

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

$model->with(['modulesData'])->get();

感谢您的回复。

2 个答案:

答案 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();