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

Laravel 10删除personal_access_tokens迁移文件后仍生成该表的疑问

问题

我用Laravel 10创建了新项目,生成了若干迁移文件。之后从迁移目录删除了项目自带的users、password_reset_tokens、failed_jobs和personal_access_tokens这几个迁移文件,但执行migrate命令创建数据库架构时,personal_access_tokens表还是被创建了。我试过清除缓存、清空数据库后重试,问题依然存在。

我找到了两个可行的解决方案:

  • 在AppServiceProvider.php的register方法中添加Sanctum::ignoreMigrations();
  • 卸载Laravel自带的Sanctum包,并手动删除config目录下的sanctum.php配置文件

我的疑惑有两个:

  1. 为什么删除对应迁移文件后personal_access_tokens表仍会生成?它是如何被触发创建,又是如何获取架构细节的?
  2. 从composer.json中移除Sanctum依赖时,我还需要手动删除config目录下的sanctum.php文件,难道没有自动移除包所有依赖文件的机制吗?

解答

一、删除迁移文件后personal_access_tokens表仍生成的原因

Laravel Sanctum包本身自带迁移文件,这些文件并不在你的项目database/migrations目录下,而是存放在Sanctum包的内部目录(比如vendor/laravel/sanctum/database/migrations)。

执行migrate命令时,Laravel会自动加载所有已安装包中注册的迁移。Sanctum的服务提供者(SanctumServiceProvider)在启动时,已经通过loadMigrationsFrom方法注册了自身包内的迁移路径,所以哪怕你删掉项目里的迁移文件,Laravel依然会执行Sanctum自带的迁移来创建personal_access_tokens表。

表的架构细节就定义在Sanctum包内部的迁移文件里,这就是它能生成完整表结构的原因。你用的Sanctum::ignoreMigrations()方案,本质就是告诉Laravel跳过加载Sanctum的自带迁移,自然就不会生成这个表了。

二、Composer无法自动删除sanctum.php的原因

Composer只负责管理vendor目录下的依赖代码——安装时把包的代码放进vendor,卸载时删除对应目录。而config/sanctum.php是你执行php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"时,从Sanctum包内复制到项目的发布文件,这类文件属于项目的一部分,Composer无法追踪和自动删除。

原因很简单:Composer不知道你是否修改过这些文件,也不确定你是否需要保留它们。不止配置文件,像视图、语言文件这类通过vendor:publish发布到项目里的文件,卸载包时都得手动删除。

内容的提问来源于stack exchange,提问作者Ansh Bargoti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:12:51