我有一個名爲listings
的表,它當前包含一個名爲closed
的列,數據類型爲integer
。該列僅包含兩個值,即1
或NULL
。在Laravel遷移中使用新創建的列
現在,我需要修改此列的數據類型爲timestamp
,但根據documentation這是不可能的,對於timestamp
數據類型是不可能的。我還想將此列的值設置爲前一個值爲1
和NULL
(如果前一個值包含NULL
)的當前日期。
這裏是我的這一戰略:
- 創建一個名爲
closed_temp
有當前日期 - 設置
closed_temp
的默認值NULL
新列的地方closed
是NULL
- 降
closed
列
- 重命名
closed_temp
列爲closed
這裏是我的代碼:
public function up()
{
Schema::table('listings', function (Blueprint $table) {
$table->timestamp('closed_temp')->default(\Carbon\Carbon::now())->nullable();
$listings = Listing::all();
foreach ($listings as $listing) {
if(!isset($listing->closed)) {
$listing->closed_temp = NULL;
$listing->save();
}
}
});
}
但是,這給了我一些錯誤:
[照亮\數據庫\ QueryException]
SQLSTATE [42S22]:列未找到:1054未知'field_list'中的列'closed_temp' (SQL:更新listings
集合updated_at
= 2017-06-21 04:50:5 8,closed_temp
=其中listing_id
= 3)[學說\ DBAL \驅動\ PDOException]
SQLSTATE [42S22]:在 '字段列表'[PDOException]
SQLSTATE [42S22] 1054未知列 'closed_temp' :列列未找到未找到:1054未知列'closed_temp' in'字段列表'
是否有任何方式在遷移中使用新創建的列?如果沒有,還有什麼其他的選擇?我也試過運行一個raw_sql
查詢,但得到了同樣的錯誤。