【问题标题】:Laravel Unit Testing Migration failsLaravel 单元测试迁移失败
【发布时间】:2015-02-05 11:29:25
【问题描述】:

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

一般错误:1 无法添加默认值为 NULL 的 NOT NULL 列 (SQL: alter table "admins" add column "title" text not null)

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

这是抱怨的文件迁移:

<?php

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

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');
        });
    }

}

【问题讨论】:

  • 这个错误看起来像是您的迁移出了问题,而不是您调用它的方式。您能否通过产生此错误的迁移更新问题?
  • @lukasgeiter,感谢您的回复。我更新了我的答案

标签: laravel migration phpunit laravel-testing


【解决方案1】:

我做了一些研究,在 Stack Overflow 上找到了this post

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2021-11-20
    • 2016-02-16
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多