Laravel 5.5 中的迁移问题

Posted

技术标签:

【中文标题】Laravel 5.5 中的迁移问题【英文标题】:Problems with migrations in Laravel 5.5 【发布时间】:2018-04-26 16:50:56 【问题描述】:

我的 Laravel 设置发生了一些非常奇怪的事情。我创建了一些迁移文件,并且在创建每个迁移文件后运行php artisan migrate 时,它们成功运行并且在数据库中创建了表。现在,如果我想运行php artisan migrate:refresh --seed,它不能回滚其中一个迁移,因为它说迁移文件不存在。 这是错误: 这是我的迁移文件:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAssessmentsTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('assessments', function (Blueprint $table) 
            $table->increments('id');
            //TODO - Complete information for this table
            $table->timestamps();
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::dropIfExists('assessments');
    

更奇怪的是,我不得不重新创建所有迁移,因为它没有随机创建迁移中列出的某些表。

以前有人遇到过这个问题吗?非常感谢任何帮助。

[更新]

过了一会儿,我意识到这不是 Laravel 的东西。出于某种原因,尽管有这些文件,但我的 Homestead 并没有查看这些文件。如果我通过 SSH(vagrant box 中的那个)访问该文件夹,则该文件不存在。如果我去真正的文件夹,它就在那里。由于某种原因,该框无法正确同步文件。 更奇怪的是,我可以访问和编辑 VMB 中的文件,但它不会列出它,也不会在运行迁移时考虑在内。这里我创建了一个screen-recording showing the problem。

[更新 2]

刚刚又录制了 2 个视频。这真的很奇怪(除非我遗漏了什么)。

Video 1.

Video 2.

【问题讨论】:

由于迁移存储在表中,如果您在 git 中检查没有这些迁移的不同分支并尝试运行命令,我可以看到这种情况。这里有这种可能吗? 你能把你的种子文件的代码放上去吗? 不,一切都在同一个分支中运行@user3158900 @JamesRiady 我的播种机代码有什么帮助?它不会改变任何东西。找不到的是迁移文件。即使我不播种它也行不通。 你试过在你的 cmd(laravel 项目)中做composer dump-autoload吗? 【参考方案1】:

这似乎是 MacOS High Sierra 和 Vagrant 的问题。为了修复它,我必须应用这个workaround。

希望这将为遇到与我相同问题的人节省一些时间。

【讨论】:

以上是关于Laravel 5.5 中的迁移问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.5 迁移中将 DB::unprepared() 用于 mysql 函数和存储过程

Laravel 5.5中的一对多关系

Laravel 5.5 Migration not found on migrate:refresh with --path 选项

LARAVEL 5.5 外键约束的格式不正确'

laravel跟书练习笔记2

LARAVEL 5.5 - 使用 Eloquent 模型将数据从 FORM 插入数据库