Laravel单元测试迁移失败
我正在尝试运行PHPUnit测试。我在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
: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,谢谢你的回答。我更新了我的答案