laravel

Laravel SQLSTATE[42S22]: 解決メモ

モデルの新規保存でのエラー

「PHPフレームワーク Laravel入門」のP252のupdateメソッドを書いて実行した際に出たエラーの解決をメモする。

PersonController.php
public function add(Request $request)
{
    return view('person.add');
}

public function create(Request $request)
{
    $this->validate($request, Person::$rules);
    $person = new Person;
    $form = $request->all();
    unset($form['_token']);
    $person->fill($form)->save();
    return redirect('./person');
}

フォームを送信すると、

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list (SQL: insert into `people` (`name`, `mail`, `age`, `updated_at`, `created_at`)(以下省略)

とエラーが発生。調べたところ「updated_atカラム」が無いとのことです。
解決方法はタイムスタンプを無効にすれば良いようです。

PersonController.php
public function add(Request $request)
{
    return view('person.add');
}

public function create(Request $request)
{
    $this->validate($request, Person::$rules);
    $person = new Person;
    $form = $request->all();
    unset($form['_token']);
    $person->timestamps = false;    // 追記
    $person->fill($form)->save();
    return redirect('./person');
}

解決方法として良いのか悪いのかわからないがフォーム送信ができ、レコードが追加できたので良かった。

参考サイト

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