Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

laravelで実行されるクエリをみたい

laravel, mysql, PHP, フレムワークlaravel, mysql, PHP


Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105
laravelでデータベースの更新をしたいときにモデルを書き換えてsave()を実行したが、変更がされないということがあり、長い時間をかけてようやく原因見つけることができました。

やったこと

modelの中身を出力

find()でモデルが正しく取得され、値の書き換えができているかを確認しました。こちらは正しく反映されていました。

実際に実行されるクエリの確認

\DB::enableQueryLog();
$blogContent->save();
\Log::debug(\DB::getQueryLog());
こちらのコードで実行されるSQLの内容を確認することができます。クエリとバインドされる値を確認したところ、where句で
id=nullとなっていました。なぜこのようなことになっていたかを確認したところ、laravelでmodelに$primaryKeyを指定しなければデフォルト値が
idとなることです。データベースのテーブルを見てみるとprimaryKeyがIDになっていました。別に使っていたところからデータベースを移行してきたので、カラム名が大文字のIDとなっていました。カラム名をidに治すか、$primaryKeyにIDを指定することで解決できそうです。