2013-05-19 90 views
0

是否必須是'id'數據庫表中的列可正常工作 show($ id),edit($ id)method in controller?
我想用「POST_ID」上的數據庫表列中的值來代替的$ id,但它拋出錯誤:ModelNotFoundException
我怎樣才能解決呢?

示例代碼:

數據庫表:

id(int), post_id(varchar32), post_title(varchar32), post_content(text)

路線:

Route::resource('posts', 'PostsController');

PostsController:

public function show($id) { return View::make('posts.show'); }

當我訪問http://localhost/posts/1 它應該返回表中有id 1的帖子視圖。
如果我根據表中的post_id值返回視圖該怎麼辦?
是否必須替換show()或?中的參數?

+0

可以請你添加相應的代碼? – Chris

+0

確定,如上所述添加。 – JackpotK

+3

你並沒有真的使用$ id,你只是在show方法中渲染視圖。是的,你可以傳遞任何你需要的東西,你的鏈接只需要符合資源:route.show必須是「http:// host/route_name/id-or-anything-else」。但是,如果您得到ModelNotFoundException,是因爲FindOrFail或FirstOrFail正在您的代碼中的其他地方使用。我沒有看到他們在Laravel源代碼中使用,他們必須是你的。 –

回答

1

在您的PostsController中,您需要訪問Post模型以從數據庫獲取數據。

這樣的: // PostsController

public function show($id) { 
$post = Post::where('post_id', $id)->first(); 

return View::make('posts.show', compact('post')); 
} 
+0

謝謝!我也發現它自laravel設置id爲默認主要列,我也可以手動定義post_id作爲模型中的主鍵,儘管不是最佳實踐。 – JackpotK

0

,您還可以使用find

public function show($id) { 
$post = Post::find($id); 
return View::make('posts.show', compact('post')); 
}