การย้ายการทดสอบหน่วย Laravel ล้มเหลว

ฉันกำลังพยายามรันการทดสอบ PHPUnit ฉันได้ตั้งค่า SQLite ใน :memory สำหรับสภาพแวดล้อมการทดสอบ ในการตั้งค่าของฉัน ฉันโทรไปที่ Artisan::call('migrate') แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาดทั่วไป: 1 ไม่สามารถเพิ่มคอลัมน์ NOT NULL ด้วยค่าเริ่มต้น NULL (SQL: แก้ไขตาราง "admins" เพิ่มคอลัมน์ "title" ข้อความไม่เป็น 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');
        });
    }

}

person Kousha    schedule 07.12.2014    source แหล่งที่มา
comment
ข้อผิดพลาดดูเหมือนว่ามีบางอย่างผิดปกติกับการย้ายข้อมูลของคุณ และไม่ใช่วิธีที่คุณเรียก คุณช่วยอัปเดตคำถามด้วยการโยกย้ายที่ทำให้เกิดข้อผิดพลาดนี้ได้ไหม   -  person lukasgeiter    schedule 07.12.2014
comment
@lukasgeiter ขอบคุณสำหรับการตอบกลับ ฉันอัปเดตคำตอบของฉันแล้ว   -  person Kousha    schedule 07.12.2014


คำตอบ (1)


ฉันค้นคว้าและพบ โพสต์นี้ บน Stack Overflow

ดูเหมือนว่า SQLite มีปัญหากับคอลัมน์ที่เป็น NOT NULL แต่ไม่มีค่าเริ่มต้น เมื่ออยู่ในสถานการณ์เดียวกัน MySQL จะใช้สตริงว่าง (สำหรับ varchar) หรือ "0" (สำหรับตัวเลข) ดังนั้นมันจึงสร้างค่าเริ่มต้นขึ้นมา

ในการแก้ปัญหาของคุณ คุณสามารถกำหนดให้คอลัมน์ เป็นโมฆะ (เฉพาะในกรณีที่คุณต้องการให้เป็นโมฆะ) หรือกำหนด ค่าเริ่มต้น

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

$table->text('title')->default('');
person lukasgeiter    schedule 07.12.2014