Laravel登录功能触发SQLSTATE[42S22]错误,请求排查修复
解决Laravel登录时SQLSTATE[42S22]列未找到错误
你碰到的这个SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in where clause错误,根源其实很明确——你构造$user_data时多套了一层数组,导致Auth组件识别错误。
问题本质
Auth::attempt()方法需要接收一维关联数组(键对应数据库字段名,值是用户输入内容),但你当前的代码生成的是嵌套数组,结构大概是这样:
[ [ 'name' => '输入的用户名', 'password' => '输入的密码' ] ]
Laravel在处理这个嵌套数组时,会把外层索引数组的键0当成数据库字段去查询,自然就会抛出“找不到列'0'”的报错。
修复代码
只需要修改LoginController里构造$user_data的代码,去掉多余的外层数组包裹即可:
class LoginController extends Controller { function index() { return view('login'); } function checklogin(Request $request) { $this->validate($request, [ 'name' => 'required', 'password' => 'required' ], ['name.required' => 'Gebruikersnaam is niet ingevuld of niet goed.', 'password.required' => 'Wachtwoord is niet ingevuld of niet goed.']); // 移除外层多余的[],直接生成一维关联数组 $user_data = [ 'name' => $request->get('name'), 'password' => $request->get('password') ]; if (Auth::attempt($user_data)) { return redirect('login/succeslogin'); } else { return back()->with('error', 'Verkeerde login gegevens!'); } } function succeslogin() { return view('succeslogin'); } function logout() { Auth::logout(); return redirect('login'); } }
额外注意事项
还有个小细节需要留意:你的模型命名为Login,但Laravel默认的Auth系统会使用User模型。如果你的数据库表是默认的users表,建议把模型改回User;如果想保留Login模型,需要在config/auth.php中修改providers.users.model的值为App\Models\Login::class,避免后续出现其他Auth相关的适配问题。
内容的提问来源于stack exchange,提问作者WaterMetMelk
相关产品推荐
相关产品推荐

