Migrasi Pengujian Unit Laravel gagal

Saya mencoba menjalankan tes PHPUnit. Saya telah menyiapkan SQLite di :memory untuk lingkungan pengujian. Dalam pengaturan saya, saya menelepon Artisan::call('migrate') tetapi kemudian saya mendapatkan kesalahan berikut:

Kesalahan umum: 1 Tidak dapat menambahkan kolom NOT NULL dengan nilai default NULL (SQL: ubah tabel "admin" tambahkan kolom "judul" teks bukan nol)

Pada dasarnya, file migrasi apa pun yang mengubah tabel yang ada akan menghasilkan kesalahan. Mengapa?

Inilah yang dikeluhkan oleh migrasi file:

<?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 sumber
comment
Kesalahannya sepertinya ada yang salah dengan migrasi Anda dan bukan cara Anda menyebutnya. Bisakah Anda memperbarui pertanyaan dengan migrasi yang menghasilkan kesalahan ini?   -  person lukasgeiter    schedule 07.12.2014
comment
@lukasgeiter, terima kasih atas tanggapannya. Saya memperbarui jawaban saya   -  person Kousha    schedule 07.12.2014


Jawaban (1)


Saya melakukan riset dan menemukan postingan ini di Stack Overflow.

Tampaknya SQLite memiliki masalah dengan kolom yang NOT NULL tetapi tidak memiliki nilai default. Ketika berada dalam situasi yang sama, MySQL hanya menggunakan string kosong (untuk varchar) atau "0" (untuk angka). Jadi itu semacam memiliki nilai default bawaan.

Untuk mengatasi masalah Anda, Anda dapat membuat kolom nullable (hanya jika Anda ingin kolom menjadi nullable) atau menentukan default.

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

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