Laravel 9使用ORM保存数据报错SQLSTATE[HY000]:users表不存在
解决Laravel 9中User模型save时提示users表不存在的问题
1. 检查User模型的表名配置
Laravel的User模型默认对应users表,如果你改了模型的用途,别不小心指定了错误的表名。打开app/Models/User.php,看看有没有手动写类似下面的代码:
protected $table = 'posts'; // 这里如果不是users就会出错
要是有,要么改成users,要么删掉这行(默认会用模型名的复数作为表名)。
2. 确认迁移文件确实是创建users表的
去database/migrations目录找迁移文件,比如开头是2014_10_12_000000_create_users_table.php的那个,打开看up()方法:
public function up() { Schema::create('users', function (Blueprint $table) { // ... 字段定义 }); }
要是这里创建的是其他表(比如posts),那users表根本没被创建,自然会报错。
3. 验证迁移是否真的跑对了数据库
- 先看
.env文件的数据库配置,确保DB_DATABASE指向的是你用DB Browser检查的那个SQLite文件:
Ubuntu下要注意,要是路径错了,迁移会跑到另一个SQLite文件里,你检查的那个自然没表。DB_CONNECTION=sqlite DB_DATABASE=database/database.sqlite # 本地项目相对路径,或者写绝对路径 - 重新跑一遍迁移(本地用
--force跳过环境提示):
跑的时候看有没有权限报错,要是有,给数据库目录加权限:php artisan migrate --forcesudo chmod -R 775 database/ sudo chown -R www-data:www-data database/
4. 清掉Laravel的缓存
要是之前执行过php artisan config:cache,可能缓存了旧的配置,导致数据库路径不对。清缓存:
php artisan config:clear php artisan cache:clear
5. 再确认SQLite里的表
用DB Browser打开.env里指定的database.sqlite,看看有没有users表。要是没有,回到步骤3,排查迁移为啥没执行成功。
内容的提问来源于stack exchange,提问作者Tamagochi4x4
相关产品推荐
相关产品推荐

