こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いている@mogmetです。
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
最近忙しぎて全然更新できてないのでさらっとトラブルシューティングメモを残します。
今回はlaravelでMySQLのcreate/updateなどをするときに、DBサーバ側ののtimestampをレコードに保存する方法を紹介します。
結論
結論から言うと答えはここにありました。
そして答えのコード。
$attributes['updated_at'] = DB::raw('CURRENT_TIMESTAMP');
意外とサクッと出てこなったのでメモです。
背景
よくある実装だと現在時刻を入れるのに
$attributes['updated_at'] = Carbon::Now();
みたいなのをよく見かけますが、これをやってしまうと実行するサーバ側のtimestampが入ってしまいます。
これは実行側の時間に依存しておりDBとの整合性が取れなくなる可能性があるので非常に危険です。
そのためデータのアクションを起こしたという時刻を入れる場合はDBの時間を入れるのが慣例なのですが、laravelでのやりかたが全然ググっても出なかったのでメモしました。
まとめ
DBの時間を入れるときは DB::raw('CURRENT_TIMESTAMP') を使おう!
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffcha、問い合わせ対応が簡単にできるCSmartといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!