Php Laravel 5.4-查询生成器问题
我有一张叫做“字符”的表格。每一行都由一个名为char_id的主键标识。我有路由和模板,还有一些带有CRUD的控制器,所以Laravel工作得很好 我希望当用户转到“character/{char\u id}”例如“character/2”时,能够显示由rows id标识的行 我的web路线中有以下代码:Php Laravel 5.4-查询生成器问题,php,mysql,laravel-5,laravel-5.4,Php,Mysql,Laravel 5,Laravel 5.4,我有一张叫做“字符”的表格。每一行都由一个名为char_id的主键标识。我有路由和模板,还有一些带有CRUD的控制器,所以Laravel工作得很好 我希望当用户转到“character/{char\u id}”例如“character/2”时,能够显示由rows id标识的行 我的web路线中有以下代码: Route::get('characters/{char_id}', function($char_id) { $character = \DB::table('characters'
Route::get('characters/{char_id}', function($char_id) {
$character = \DB::table('characters')->find($char_id);
dd($character);
});
但当我访问“characters/1”或任何其他数字时,我会出现以下错误:
Connection.php第647行中的QueryException:
SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“id”(SQL:select*fromcharacters
whereid
=1限制1)
它似乎在寻找一个名为“id”的列,而不管我试图从URL传递什么。我正在学习一个使用“id”的教程,所以我怀疑我的代码正在寻找一个名为“id”的列,但我不知道如何绕过它 这是因为默认情况下,find检查
id
列,在不使用模型的情况下修复此问题的最简单方法是使
$character = \DB::table('characters')->where('char_id', $char_id)->first();
但是,如果您有角色模型,则可以只设置:
protected $primaryKey = 'char_id';
然后使用查找:
App\Character::find($char_id);
“默认”意味着您可以更改它。你不能。查找与
id
列进行显式比较。您只能通过扩展Builder
类并重新定义find
方法来更改它。如果您使用的是模型(正如我刚才添加的那样),则不会更改,但是您使用的是ActiveRecord,而不仅仅是DBAL。True,因为eloquent不使用相同的查询生成器,但这仍然是一种轻松实现其目标的方法。但是,是的,我明白你的意思,英语不是我的母语。我只是想向所有读者指出,它不是一种选择:)