Laravelのモデルを使ったインサートで[SQLSTATE[HY000]]が発生

Laravelのロゴ Laravel

PHPフレームワーク Laravel入門」のP246あたりでちょっと困ったので備忘録を残します。

開発環境

Laravel Framework 6.0.1
XAMPP 7.3.2

エラー内容

SQLSTATE[HY000]: General error: 1 table people has no column named updated_at
 (SQL: insert into "people" ("name", "mail", "age", "updated_at", "created_at")
 values (akira, mituki@mi, 22, 2019-09-25 14:27:36, 2019-09-25 14:27:36))

テーブルに用意したフィールドは「"name", "mail", "age"」の3つだけだったけど、見知らぬ「"updated_at", "created_at"」が入ってきている。
調べた結果、自動で更新をしているようだ。

対応

モデルにpublic $timestamps = false;を記述する。
「Larabel入門」をやっている人は「Person.php」に以下のように記述すればエラーが消えます。

class Person extends Model
{
    public $timestamps = false;

参考

LaravelのEloquentモデルでupdated_atがないテーブルを使う - KayaMemo

メモ

updated_at created_atを自動で更新してくれるのでDB設計の時に必要が無い場合を除いては作っておく
モデル内に「public $timestamps = false;」を書くとそのモデルでの更新が全部止まってしまうので留意するように

追記

マイグレーションを用いてテーブルを生成すれば、"updated_at", "created_at"が自動で生成される。
Laravelで組みなおすWebアプリが既存のDBを使うので飛ばしてたのでエラーが出たけど、全部順番通りに実施すれば問題なく動くと思われる。

コメント

タイトルとURLをコピーしました