2017-05-25 6 views
1

私は "Characters"というテーブルを持っています。各行は、char_idと呼ばれる主キーによって識別されます。私はルートとテンプレート、いくつかのCRUDを持ったコントローラを持っているので、Laravelはうまく動いています。Laravel 5.4 - クエリビルダーの問題

ユーザーが「文字/ {char_id}」(たとえば「文字/ 2」)に移動すると、行idで識別される行を表示できます。私は、「文字/ 1」をご覧いただくか、他の数が、私はこのエラーを取得するとき

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

:しかし

私は自分のWebルートに次のコードをしている

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)

あると思われますURLから渡そうとするものに関係なく、「id」という列を探します。私は "ID"を使用するチュートリアルに従っているので、私のコードは "id"という列を探していると思われますが、その回避方法はわかりません。あなたはキャラクタモデルを持っている場合

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

しかし、あなただけで設定することができます。

答えて

3

は、デフォルトではチェックにid列を見つけるためです、モデルを使用せずにこの問題を解決する最も簡単な方法は、自分がどこにすることです:その後、

protected $primaryKey = 'char_id'; 

と見つけ使用:

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

"デフォルトでは" ということを意味しますあなたはそれを変更することができます。できません。 Findは 'id'カラムと明示的に比較します。 'Builder'クラスを拡張し、' find'メソッドを再定義するだけで変更できます。 – Scopey

+0

モデルを使用しているのではなく、ちょうど –

+0

を追加しました。確かにDBALだけでなくActiveRecordも使用しています。 – Scopey

関連する問題