Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel单元测试迁移失败_Laravel_Migration_Phpunit_Laravel Testing - Fatal编程技术网

Laravel单元测试迁移失败

Laravel单元测试迁移失败,laravel,migration,phpunit,laravel-testing,Laravel,Migration,Phpunit,Laravel Testing,我正在尝试运行PHPUnit测试。我在:memory中为测试环境设置了SQLite。在我的设置中,我调用了Artisan::call('migrate'),但随后出现以下错误: 常规错误:1无法添加默认值为NULL的NOT NULL列 (SQL:alter table“admins”添加列“title”文本不为空) 基本上,任何修改现有表的迁移文件都会返回错误。为什么? 以下是文件迁移所抱怨的问题: <?php use Illuminate\Database\Migrations\Mig

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

常规错误:1无法添加默认值为NULL的NOT NULL列 (SQL:alter table“admins”添加列“title”文本不为空)

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

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

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

}

我做了一些研究,发现了堆栈溢出

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

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

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

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

这个错误看起来像是你的迁移出了问题,而不是你所说的那样。你能用产生这个错误的迁移更新这个问题吗?@lukasgeiter,谢谢你的回答。我更新了我的答案