2015-12-16 86 views
0

我在我的模型這種關係:Laravel 5.1預先加載 - belongsToMany與參數

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

我想是我的eagerload模型的動態關係。但我該怎麼做? 我使用這段代碼來重載我的關係,但是如何添加參數$module

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

感謝您的回覆。

+0

哇,我甚至不知道你可以傳遞一個參數給你的關係。 – Amarnasan

+0

是的,它與參數一起工作..我甚至需要這個,因爲我使用我的模型的動態模塊關係。 – goldlife

回答

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

+0

這是一個有趣的方法..但這是行不通的,因爲在laravel模型類中已經有一個__call函數。 (vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php)... 我收到錯誤「調用成員函數orderBy()null」 – goldlife

+0

@goldlife沒問題: :: _呼叫以防它與我們正在尋找的 – Amarnasan

+0

hm錯誤同時出錯:「調用成員函數orderBy()on boolean」..而不是「調用成員函數orderBy()null」 – goldlife

0

我不知道如何傳遞參數,但你可以這樣做:

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

不,這不是我的問題的解決方案,謝謝。 – goldlife