【Laravel】local.ERROR: Trying to get property 'id' of non-object {"exception":"[object] (ErrorException(code: 0):
【Laravel】local.ERROR: Trying to get property 'id' of non-object {"exception":"[object] (ErrorException(code: 0):
先の投稿内容と同じパーツでの一幕。
Creating default object from empty valueの解決よりもこちらの方がだいぶかかりました。
おおよそ2時間くらい。
同じく凡ミスと思い込みで解決が遅れたというね。
自戒の事例です。
Google先生に翻訳していただくと「非オブジェクトのプロパティ『id』を取得しようとしています」との事。
idを取得しようとしてるって、このテーブルAuto_Incrementなんだけど。
と思ってしまったから他が見えなくなったんだろうなぁきっと。
問題が発生していた場所
#顧客別単価を記録する
$news = new Customerprice();
$new->item_id = $value->id;
$new->customer_id = $customer->id;
$new->inner= $value->caseInner;
$new->caseprice = $value->caseprice;
$new->singleprice = $value->singleprice;
$new->start = today()->format('Y-m-d');
$new->end = NULL;;
前回と同じですね。
と言うか(時系列的にこちらが前なので)前回よりも出来の悪いスクリプトですよね。
エラーの出ない正しいコード
#顧客別単価を記録する
$news = new Customerprice();
$news->item_id = $value->id;
$news->customer_id = $customer->id;
$news->inner= $value->caseInner;
$news->caseprice = $value->caseprice;
$news->singleprice = $value->singleprice;
$news->start = today()->format('Y-m-d');
$news->end = NULL;;
$news->save();
そうなんです、変数の件はもちろんですが、save()が無かった。
new Modelsで宣言しておいて何もしないんか!と言われてたんですね。
『Trying to get property '○○' of non-object』はアロー演算子の先に値が無い時にも出てくる
過去記事でも記載している通り、このエラーはオブジェクトが存在しない時に発生します。
アロー演算子で操作できるのは『配列』ではなく『オブジェクト』。前回はViewでオブジェクトを操作しているときに発生しました。
今回も「矢印の先にオカシイ値があるのだろう」という思い込みが解決スピートを遅延させてしまいました。
'○○'の部分が『id』である点が今回の特徴です。
Auto_Incrementなのにidで苦情を言われている場合、それはそもそもアロー演算子の先のお話ではありません。
idそのものに作用する部分(今回は$new に色々書いておいて処理が無い事)に何か不備があります。
まとめ
凡ミスの解決に合計3時間。
痛すぎる。
プログラムに慣れてきて思い込みも増えてしまったようです。
マジで気をつけなきゃ。


