首页 > 解决方案 > 如何使用 Laravel 表单验证检查提交到数据库的数据是否唯一?

问题描述

我是 Laravel 的新手,我遇到了一个问题,当我检查提交的数据是否对数据库来说是唯一的时,我得到了这个错误:

Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `users` where `0` in (tom@heekdevelopment.comasd, asd) limit 1)
http://127.0.0.1:8000/register 

这是我在 Laravel 中的代码:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function index(){
        return view('auth.register');
    }
    
    public function store(Request $request){
        $this->validate($request, [
            'name'  => [
                'required',
                'max:255'
            ],
            'username' => [
                'required',
                'max:255',
                'unique:users,username'
            ],
            'email' => [
                'required',
                'email',
                'max:255',
                'unique:users,email'
            ],
            'password' => [
                'required',
                'confirmed'
            ]]);

        User::create([
            'name'      => $request->name,
            'username'  => $request->username,
            'email'     => $request->email,
            'password'  => Hash::make($request->password)
        ]);
        
        auth()->attempt([$request->only('email', 'password')]);
        
        return redirect()->route('dashboard');
    }
}

我认为unique参数检查了一个值是否唯一。

它在技术上确实会检查它,但是当我提交一个唯一的新值时它会引发错误,它确实会输入到数据库中。

如何解决这个问题?

标签: phplaravel

解决方案


[]您应该从attempt方法中删除附加数组,因为对象的only方法$request返回一个数组。

auth()->attempt($request->only('email', 'password'));

推荐阅读