2017-05-25 178 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