You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel注册提交报错SQLSTATE[42S02] 提示ums.people表不存在

报错信息

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'ums.people' doesn't exist

问题背景

搭建简易注册登录系统时,已完成前端表单开发与数据库创建:使用的数据库名为ums,库中实际创建的用户表名为persons,预期注册提交时向persons表插入用户数据。点击注册按钮时触发上述报错,框架提示找不到ums.people表。

问题根因

这是Laravel框架Eloquent ORM的默认表名映射规则导致的:
控制器代码中通过$p1 = new Person();实例化了Person模型,Eloquent默认会将模型类名转为蛇形复数格式作为对应的数据库表名,Person转换后的结果就是people,因此框架会自动查询ums.people表,和你实际创建的persons表名不匹配,最终抛出表不存在的错误。

修复方案

直接在Person模型文件中显式指定绑定的表名即可,这是最稳妥的改法,不需要调整已建好的数据库表结构:

  1. 找到项目中存放模型的目录(通常是app/Models/)下的Person.php文件
  2. 在模型类中添加$table属性指定关联表为persons,同时建议配置$fillable属性开启字段白名单,避免后续保存数据时触发批量赋值报错:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    // 手动指定模型关联的数据库表名,覆盖框架默认的复数映射规则
    protected $table = 'persons';

    // 配置允许批量赋值的字段
    protected $fillable = ['name', 'email', 'password', 'type'];
}

修改保存后重新提交注册请求即可正常写入数据。

额外提示:当前代码中用户密码是明文存储的,正式使用前建议调用bcrypt($req->password)对密码做哈希处理再存入数据库,避免安全风险。

相关业务代码参考

注册提交控制器方法

function regSubmit(Request $req)
{
    @$this->validate($req,
                    [
                        "name"=>"required|max:20|regex:/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/",
                        "email"=>"required|regex:/^([1-9]{2}-[0-9]{5}-[1-3]{1})\@student\.aiub\.edu+$/",
                        "password"=>"required|min:8|regex:/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{8,}$/",
                        "conf_password"=>"required|same:password",
                        "type"=>"required"
            
                    ],
                    [
                        "name.required"=> "Please Enter Your Name",
                        "name.max"=> "Maximum 20 Characters",
                        "name.regex"=>"Please Enter A Valid Name",
                        "email.required"=>"Please Enter Your Email Address",
                        "email.regex"=>"Please Enter A Valid Email Address",
                        "password.required"=>"Please Enter A Password",
                        "password.min"=>"Minimum 8 Characters",
                        "password.regex"=>"password must contain a special character, a number and an uppercase letter",
                        "conf_password.required"=>"Please Confirm Your Password",
                        "conf_password.same"=>"Password do not match",
                        "type.required"=>"Please Enter User Type"
                    ]
                    );
                    
                    $p1 = new Person();
                    $p1->name = $req->name;
                    $p1->email = $req->email;
                    $p1->password = $req->password;
                    $p1->type = $req->type;
                    $p1->save();
                    return redirect('users.login');
}

注册表单前端代码

@extends('layouts.logoutlay')
@section('content')
<form action ="{{route('users.reg.submit')}}" method="post" style="margin: auto; width: 220px;">
{{@csrf_field()}}
Name: <input type = "text" value = "{{old('name')}}" name ="name"></br>
@error('name')
        <span class="text-danger">{{$message}}</span><br>
@enderror
Email: <input type = "text" value = "{{old('email')}}" name ="email"></br>
@error('email')
        <span class="text-danger">{{$message}}</span><br>
@enderror
Password: <input type="password" value = "{{old('password')}}" name="password"></br>
@error('password')
        <span class="text-danger">{{$message}}</span><br>
@enderror
Confirm Password : <input type="password" value = "{{old('conf_password')}}" name="conf_password"></br>
@error('conf_password')
        <span class="text-danger">{{$message}}</span><br>
@enderror
Type : <input type="radio" value="user" name="type"> User  <input type="radio" value="admin" name="type"> Admin  </br>
@error('type')
        <span class="text-danger">{{$message}}</span><br>
@enderror
   

</br>


<input type="submit" value="Register">
</form>
@endsection

内容的提问来源于stack exchange,提问作者Mehedi Hasan Talha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:39:19