2016-10-26 55 views
0

這可能是一個初學者問題,但在我的Laravel應用程序中有一些我不太明白的地方。 我在路由上使用id,我試圖讓laravel自動獲取數據庫中的對應對象。它非常適用於某些型號: 在路由:Laravel路由自動解析參數

Route::get('/project/{project}', '[email protected]'); 

,並在控制器

public function useProject(Request $request, Project $project) 

之後,我有我的 「項目」 獲取從DB

protected 'attributes' => 
    array (size=2) 
     'id' => int 9 
     'name' => string 'test' (length=4) 
    ... 
public 'exists' => boolean true 

在代碼的另一部分,我在其他模型上使用相同的路由結構時,自動解析似乎不會發生

路由:

Route::get('/build/{testscenario}','[email protected]'); 

控制器:

public function create(Request $request, TestScenario $scenario){ 

而結果:

protected 'attributes' => 
    array (size=0) 
     empty 
    ... 
    public 'exists' => boolean false 

兩款車型使用的是 「ID」 列作爲主鍵。 我錯過了什麼?

非常感謝您的幫助!

+0

你是否試圖做一個路由模型綁定?參考這個例子https://scotch.io/tutorials/cleaner-laravel-controllers-with-route-model-binding –

回答

0

您正在嘗試使用模型隱式綁定,所以我建議您閱讀此section from the documentation

你需要匹配的變量名:

Route::get('/build/{testscenario}','[email protected]'); 

而在你的控制器:

public function create(Request $request, TestScenario $testscenario){ 
+0

是的我發現問題後不久發現問題。愚蠢的錯誤:)但謝謝你的幫助! – Ours

0

啊,沒關係。找到解決方案。這是一個命名問題。

Route::get('/build/{testscenario}','[email protected]'); 

而且

public function create(Request $request, TestScenario $scenario){ 

參數應該具有相同的名稱(即不是 「testscenario」 或 「方案」)。