Laravel单元测试迁移失败



我正在尝试运行 PHPUnit 测试。我已经为测试环境设置了SQLite :memory。在我的设置中,我调用Artisan::call('migrate')但随后出现以下错误:

常规错误:1 无法添加默认值为 NULL 的 NOT NULL 列 (SQL:更改表"管理员"添加列"标题"文本不为空)

基本上,任何修改现有表的迁移文件都会返回错误。为什么?

以下是文件迁移正在抱怨的问题:

<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
class AddTitleToAdminsTable extends Migration {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('admins', function(Blueprint $table)
        {
            $table->text('title');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('admins', function(Blueprint $table)
        {
            $table->dropColumn('title');
        });
    }
}

我做了一些研究,并在Stack Overflow上找到了这篇文章。

SQLite 似乎对NOT NULL但没有默认值的列有问题。在相同的情况下,MySQL只使用空字符串(用于varchar)或"0"(用于数字)。所以它内置了默认值。

要解决您的问题,您可以使列可为空(仅当您希望它可为时)或定义默认值

$table->text('title')->nullable();
$table->text('title')->default('');

最新更新