こんにちわ、春爛漫の日々を謳歌している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でグループ化したデータの中から各グループの最新レコードを取得する方法