Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4-查询生成器问题_Php_Mysql_Laravel 5_Laravel 5.4 - Fatal编程技术网

Php Laravel 5.4-查询生成器问题

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'

我有一张叫做“字符”的表格。每一行都由一个名为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')->find($char_id);
    dd($character);
});
但当我访问“characters/1”或任何其他数字时,我会出现以下错误:

Connection.php第647行中的QueryException: SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“id”(SQL:select*from
characters
where
id
=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不使用相同的查询生成器,但这仍然是一种轻松实现其目标的方法。但是,是的,我明白你的意思,英语不是我的母语。我只是想向所有读者指出,它不是一种选择:)