【Laravel】updateメソッドで保存する時にハマった
データの更新をする際に、updateメソッドを使って実行。そして、ハマった。そのコードは、下記。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Model\Book; class BookController extends Controller { public function index(Request $request) { $book = Book::where('page', 100)->get(['page'])->first(); $book->page = 5; $book->update(); } }
ログに実行したsqlを出力しているので、確認してみる。
[2019-08-31 15:52:22] local.INFO: Query Time:11.06s] select `page` from `book` where `page` = ? [2019-08-31 15:52:22] local.INFO: Query Time:1.53s] update `book` set `page` = ?, `updated_at` = ? where `id` is null
2行目でupdate文のsql。コード上では、「wehre is null」は使っていない。恐らく、updateメソッド内で実装しているのかな。
それで、下記のようにgetの指定カラムにidを追加したら想定通りの動作になった。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Model\Book; class BookController extends Controller { public function index(Request $request) { $book = Book::where('page', 100)->get(['id', 'page'])->first(); $book->page = 5; $book->update(); } }
ログも確認
[2019-08-31 16:07:58] local.INFO: Query Time:17.51s] select `page`, `id` from `book` where `page` = ? [2019-08-31 16:07:58] local.INFO: Query Time:4.01s] update `book` set `page` = ?, `updated_at` = ? where `id` = ?
where句でidを使って絞り込みをかけるようになっていた。なるほど、面白い。updateメソッドの処理の確認をしてみよう。