我的应用中有几次桌面迁移。表格是:
people
与其他每个表之间存在一对多的关系。
// The people table definition
Schema::create('people', function (Blueprint $table) {
$table->uuid('id');
$table->primary('id');
...
$table->timestamps();
});
// the skill table definition with the foreign key constraint referencing people
Schema::create('skills', function (Blueprint $table) {
$table->uuid('id');
$table->primary('id');
$table->uuid('person_id');
$table->foreign('person_id')
->references('id')->on('people')
->onDelete('cascade');
...
$table->timestamps();
});
当我通过artisan
创建迁移时,我在skills
迁移之前意外创建了people
迁移文件。
这导致了一个问题,因为当您运行php artisan migrate
时,文件将按时间戳顺序触发,如果在定义外键约束之前未建立主键,则会出现错误,例如:
文件:
2016_02_24_174227_create_people_table.php
文件后
2016_02_24_174221_create_skills_table.php
因为skills
文件名称中的时间戳前缀较小(17:42:21来自17:42:27之前)。这意味着skills
中的外键约束正在寻找people
中尚不存在的主键。
为了解决这个问题,我将文件2016_02_24_174227_create_people_table.php
重命名为2016_02_24_170000_create_people_table.php
。
这个修复工作正常,但现在每当我php artisan migrate:refresh
我的桌子时,我都会收到一个错误,说工匠仍然在寻找老人档案:
我尝试使用php artisan cache:clear
清除应用程序缓存,但我仍然收到错误消息。
是否需要清除特定缓存以删除对原始迁移文件的引用?
答案 0 :(得分:10)
这不是缓存问题。你只需要再次运行composer:
composer dump-autoload
答案 1 :(得分:2)
回滚迁移并检查
migrate:rollback