Mih*_*nde 29
第一个解决方案:
似乎您在不同时间完成了 2 次迁移,但名称基本相同。
例如 : 2019_01_18_020910_create_roles_table.php
和 2019_01_16_020910_create_roles_table.php
Laravel 将转换此文件名,消除日期签名和 Camel Casing 剩余文本。
因此,CreateRolesTable
即使拍号不同,这两种迁移也会有等级。检查您的迁移目录是否有这样的 2 个文件。
要检查这个从项目根中的终端运行: grep -ri 'createrolestable' database/migrations
第二种解决方案:
有时作曲家的内部类自动加载会导致此问题。执行以下操作以检查它是否解决:
跑 composer install
第三个解决方案:
这可能是无效的,但同一文件不应错误地具有相同的类声明 2 文件。
第四个解决方案:
您可能已经安装了一个具有相同类名的迁移的包。找到运行grep -ril 'createrolestable' vendor
如果它显示任何文件,那么这就是导致 2 个类具有相同名称的原因。
您可以创建一个新的php artisan make:migration create_roles_table_custom
。然后将当前迁移中的内容复制到新迁移中并删除现有迁移(不是从包中,而是从您创建的包中删除)。
这将创建一个CreateRolesTableCustom
与包已有的类不同的类。
Jas*_*son 19
除了给出的其他答案外,如果迁移文件名不是类名的蛇形版本,也可能发生此错误。
因此迁移文件2019_01_18_020910_create_roles_table.php
必须包含类CreateRolesTable
. 如果它包含 class CreateRoleTable
,但缺少s
,则会引发“无法声明 X...”错误。我在 Laravel 8 上发现了这个,可能适用于早期版本。
出现这种情况是因为 Laravel 在文件名拼写错误时多次加载迁移文件,而第二次加载是在抛出异常时。
asc*_*ftw 11
如果您使用的是 Laravel 8 或更高版本,您可以使用匿名迁移来避免类名冲突。
以下是如何声明匿名迁移。不要忘记末尾的分号。
return new class extends Migration
{
//
};
Run Code Online (Sandbox Code Playgroud)
更多来自文档。
小智 8
请注意迁移文件名。
对我来说,迁移文件名是:
2021-10-13_000000_create_examples_table
Run Code Online (Sandbox Code Playgroud)
但正确的是:
2021_10_13_000000_create_examples_table
Run Code Online (Sandbox Code Playgroud)
哈哈
归档时间: |
|
查看次数: |
20813 次 |
最近记录: |