注意:文章內容建立在Migrations
之上,如果你對Migration不熟悉,可以先參考 Laravel數據庫遷移(Database Migration)操作實例
在Laravel 5.3
之前,migrations
中的$table->timestamps()
所創建的created_at
及updated_at
兩個column
都是不允許爲空的,而在5.3
開始,官方文檔中寫道:
Command | Description |
---|---|
$table->timestamps(); | Adds nullable created_at and updated_at columns. |
我們可以看到,現在這兩個column
都可以爲NULL
。
如果我們保留默認的migration
,那麼在更新及插入數據時,Laravel
會自動幫我們處理好created_at
和updated_at
兩個時間戳,即插入數據時,兩者都被更新爲服務器當前時間,更新數據時,updated_at
被更新爲操作發生時間。
但是如果我們後端代碼沒有使用Laravel
,例如我們需要使用Python
來插入一部分數據,那麼我們有兩種選擇:
1. 手動生成時間並插入
2. 在migration
文件中,調整created_at
及updated_at
的類型
第一種顯而易見,那麼我們就不多說。
第二種方法,我們將原有的$table->timestamps()
去掉,然後添加上以下代碼:
use Illuminate\Support\Facades\DB;
...
public function up()
{
...
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
...
}
...
注意,我們需要引入DB Facade
來使用DB::raw
語句。那麼我們看到,現在created_at
以及updated_at
兩個column
被分別用timestamp()
進行聲明,我們看一下官方文檔怎麼寫的:
Command | Description |
---|---|
$table->timestamp(‘added_on’); | TIMESTAMP equivalent for the database. |
可以看到,使用timestamp()
聲明的column
不能爲NULL
。
那麼我們需要添加兩個column
的默認值:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
這樣一來,我們在未使用Laravel
而需要操作數據庫時,不需要主動插入時間,數據庫也會幫我們自動插入及更新時間戳。