3

我正在尝试运行 PHPUnit 测试。我已经为测试环境设置SQLite了。:memory在我的设置中,我调用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');
        });
    }

}
4

1 回答 1

4

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

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

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

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

$table->text('title')->default('');
于 2014-12-07T21:02:05.233 回答