【Laravel】タイムスタンプがないテーブルを更新(保存)する方法

 こんにちわ、春爛漫の日々を謳歌しているHashiです。今回は、Laravelにおいてタイムスタンプ(Created_at,Updated_at)のないテーブルを更新(保存)する際の方法を紹介したいと思います。

 なお、Laravelとはなんぞやという方は下の記事を参照してください!

環境

 今回の環境は下記の通りとなります。

今回の環境

  • Laravel 5.5
  • MySQL 5.6.37

仕様と要点

 システムを構築していく上で、あらかじめ決められたもので特に日時を必要としない情報をDB化することもあると思います。例えば配送系のシステムで言えば「配送時間帯」や「配送状況」のステータスなどがそれにあたります。

 今回は仮にステータス情報を想定して説明したいと思います。

 例えば、下記のようなテーブルがあったとします。

 ちなみに、テーブル名は「statuses」でモデル名は「Status」とします。

ID status
1 未申請
2 申請中
3 承認

 このテーブルは「id」,「status」という2つのカラムから構成されており、特に時系列データを必要としないテーブルなので「Created_at」、「Updated_at」のタイムスタンプカラムは必要ありません。

タイムスタンプのないテーブルを更新(保存)する方法

 そして、このテーブルに新たにデータを追加したり、名称変更など更新したい場合があったとします。例えば、新規に「キャンセル」というステータスを追加したい場合、オーソドックスな方法で書くとこうなります。


$status = new Status;
$status->name = 'キャンセル';
$status->save();

 しかし、このやり方では「Column not found: 1054 Unknown column ‘updated_at’ in ‘field list’」のようなエラーが発生します。つまり「updated_atカラムがねーぞ」と怒られるわけです。

 では、この場合どうするかと言うと至って簡単です。タイムスタンプを無効にしてあげればいいだけです。


$status = new Status;
$status->name = 'キャンセル';
$status->timestamps = false;
$status->save();

 このように、4行目でtimestampsをfalseにしてあげることで正常に更新されます。

 既存のデータを更新する場合も同様にタイムスタンプを無効することでアップデートすることができます。

まとめ

 このように、Laravelのsaveメソッド等はデフォルトでタイムスタンプの更新に関するコードが含まれているのですが、タイムスタンプを無効にしてあげることで日時情報が必要のないデータも管理することができます。

 初歩的なことですが、ご参考までに。

 それでは、今回はここまで!Hashiでした。また!

この記事のまとめ

  • Laravelでグループ化したデータの中から各グループの最新レコードを取得する方法

お仕事のご相談・ご依頼
お気軽にお問い合わせください!

お仕事の依頼はこちら

著者プロフィール

Taka

東京、奄美大島を拠点にサーフィンとスノーボードが好きなフリーランスのWebクリエイターです。普段はプログラム書いたりデザインしたり映像作ったりしています。いろいろな人の話しを聞くのが好きなので、このブログを通して多くの人と繋がりが出来たら嬉しいです。noteとInstagramもやっているのでフォローしてくれたらありがたいです!

人気記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です