Laravel10 commit後にselectしたデータをbladeに渡せない

実現したいこと

Controller内で、
渡されたidに紐づくデータがあればSELECT文を実行したデータをbladeに渡し、
なければINSERT文を実行後、INSERTしたデータに基づいてSELECT文を実行しそのデータをbladeに渡そうとしています。

発生している問題・分からないこと

トランザクションを作成し、INSERT、SELECT実行後にCOMMITしており、取得したいデータをSELECT文で取得できていることはログに出力して確認していますが、
bladeに引き渡す際にnullとなっているのか「Attempt to read property "id" on null」エラーになります。
※blade内でfor文を作成し、その中で「$datas->id」を使用している箇所でエラーになっています。
ログを見る限りデータは取得できているので、bladeに引き渡す際に問題があるのか、処理の順番の問題なのか、と考えましたが解決できておりません。

また、INSERTも成功してCOMMITされた状態になっているので、再度同じbladeのページを開く際はエラーなく取得したデータでページを作成できております。

エラーメッセージ

error

1[previous exception] [object] (ErrorException(code: 0): Attempt to read property \"id\" on null at /var/www/html/storage/framework/views/f02f8c7a9af0c38077d062ddcd8d8a0d.php:194) 2[stacktrace]

該当のソースコード

     $data_1 = DB::table('table_2') ->select('id', //省略) //省略 ->where('id',$id) ->get(); try{ if(count($data_1)==0){ DB::beginTransaction(); $datasx = DB::table('table_1') ->where("id",$id) ->get(); foreach ($datasx as $key => $data){ $datainsert[] = [ 'data_a' => $data->a, 'data_id' => $data->id, 'created_at' => now(), 'updated_at' => now(), ]; } if(count($datainsert)>0){ DB::table('table_2')->insert($datainsert); $datas = DB::table('table_2') ->select('id', //省略) //省略 ->where('id',$id) ->get(); DB::commit(); LOG::debug($datas); //ログではデータ取得を確認 } }else{ $datas = DB::table('table_2') ->select('id', //省略) //省略 ->where('id',$id) ->get(); } }catch(Exception $e){ DB::rollBack(); //エラー時処理 } return view('blade')->with("datas",$datas);

試したこと・調べたこと

上記の詳細・結果

・ログ出力でデータを取得できていることまでは確認できました。
・トランザクション内のSELECT文の実行場所は、COMMITの前後を試しました。

補足

質問掲載にあたりテーブル名やデータ名はダミーのものに変更しております。

コメントを投稿

0 コメント