简体   繁体   中英

Laravel 5.1 Eager Loading - belongsToMany with parameter

I have this relationship in my Model:

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

What I want is to eagerload a dynamic relation of my model. But how can I do this? I use this code to eagerload my relation, but how can I add the parameter $module ?

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

Thanks for reply.

Consider the following:

Define the fallback function to your Model:

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);
    }
}

Use the with function with this way:

$tal = \App\Model::with('modulesData ModuleName')->get();

(being 'ModuleName' the name of the module you want to use as parameter for the relationship).

This way you can eagerload with the string " modulesData_moduleName ". When with is invoked it won't find that function and will fallback to __call , which will extract the "moduleName" and call the relationship "modulesData" with it as parameter.

I dont know how to pass parameters but you could do something like:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM