背景
第一,我們測試的時候使用 SQLite。
第二,一個正在執行的網站,資料庫的有一些改變,我們一般是會新新增 migration,如下:
public function up()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('column1');
$table->integer('column2')->comment('.......');
//...等等等
});
}
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('column2');
$table->tinyInteger('column1');
//...等等等
});
}
問題
以上程式碼在 Mysql 上跑沒有任何問題,不管是 migrate
還是 migrate:rollback
還是 migrate:refresh
,都完美執行。
但是在測試(使用 SQLite)的時候,各種詭異的問題,這個欄位不存在,那個欄位有問題...
解決方法
每一個操作都放在一個 Schema::table 的閉包裡面。
public function up()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('column1');
});
Schema::table('table_name', function (Blueprint $table) {
$table->integer('column2')->comment('.......');
});
//...等等等
}
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('column2');
});
Schema::table('table_name', function (Blueprint $table) {
$table->tinyInteger('column1');
});
//...等等等
}
好多人遇到這個問題,比如:
https://github.com/laravel/framework/issue...
如果你遇到了,不要大驚小怪。
本作品採用《CC 協議》,轉載必須註明作者和本文連結