2017-05-25 101 views
1

我有一個名爲「Characters」的表。每一行都由/標識一個​​名爲char_id的主鍵。我有路線和模板以及一些帶有一些CRUD的控制器,所以Laravel工作的很好。Laravel 5.4 - 查詢生成器問題

當用戶轉到「字符/ {char_id}」例如「字符/ 2」時,我希望能夠顯示由行ID標識的行。

我已經在我的網站,將以下代碼:

Route::get('characters/{char_id}', function($char_id) { 
    $character = \DB::table('characters')->find($char_id); 
    dd($character); 
}); 

但是當我遊「字/ 1」或任何其他的號碼,我得到這個錯誤:

QueryException in Connection.php line 647: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from characters where id = 1 limit 1)

這似乎是尋找一個名爲「id」的列,無論我嘗試從URL傳遞什麼。我正在學習使用「id」的教程,所以我懷疑我的代碼正在尋找一個名爲「id」的列,但我不知道如何解決這個問題。

回答

3

這是因爲在默認情況下找到檢查id列,以解決這一問題,而無需使用模型的最簡單的方法是使在那裏自己:

$character = \DB::table('characters')->where('char_id', $char_id)->first(); 

但是,如果你有一個人物模型,你可以設置:

protected $primaryKey = 'char_id'; 

,然後使用發現:

App\Character::find($char_id); 
+0

「默認」 意味着你可以改變它。你不能。查找明確地與「id」列進行比較。你只能通過擴展'Builder'類並重新定義'find'方法來改變它。 – Scopey

+0

不是如果你使用模型,因爲我剛剛添加 –

+0

確實,但是你使用的是ActiveRecord,而不僅僅是DBAL。 – Scopey