🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

714閲覧

raraberu5.7系で「Creating default object from empty value」のエラーを解決したい。

amaturePy

総合スコア131

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2020/01/03 12:32

Laravel5.7系で編集機能を作成してます。
そこで「Creating default object from empty value」と言うエラーで躓いてます。
この解決エラー解決に関してアドバイスを頂きたいです。

理想の動きは
edit.blade.phpのform(現状、入力欄には編集前のレコード情報を表示できております)に変更内容を入力

updateアクションでDBに上書きになります。

ここで丸一日解決できず、質問させて頂いてます。何卒よろしくお願いします。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Model\ChatConversation; class ChatConversationController extends Controller { public function display() { $data = ChatConversation::all(); return view('display',['data' => $data]); } public function create(){ return view('create'); } public function store(Request $request){ $chatConversation = new ChatConversation(); $chatConversation->save(); } public function edit(Request $request){ $record = ChatConversation::find($request->id); return view('edit', ['record'=>$record]); } public function update(Request $request) { $record = new ChatConversation(); $record = ChatConversation::find($request->id); $record->node_id = $request->node_id; $record->node_id = $request->line_id; $record->node_id = $request->message; $record->node_id = $request->version_type; $record->node_id = $request->ip_adddr; $record->node_id = $request->platform; $record->node_id = $request->translate; $record->save(); return redirect('/'); } } ?> コード
Edit {{Form::open(['action' => 'ChatConversationController@update','method'=>'Post'])}} <label>node_id:<input type="text" name="node_id" value='{{ $record->node_id }}'></label><br> <label>line_id:<input type="text" name="line_id" value='{{ $record->line_id }}'></label><br> <label>message:<input type="text" name="message" value='{{ $record->message }}'></label><br> <label>version_type:<input type="text" name="version_type" value='{{ $record->version_type}}'></label><br> <label>ip_addr:<input type="text" name="ip_addr" value='{{ $record->ip_addr }}'></label><br> <label>platform:<input type="text" name="platform" value='{{ $record->platform}}'></label><br> <label>translate:<input type="text" name="translate" value='{{ $record->translate }}'></label><br> <input type="submit" name="post" value="Send"> {{Form::close()}} コード
<?php Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Route::get('/display', 'ChatConversationController@display')->name('display'); Route::get('/create', 'ChatConversationController@create')->name('create'); Route::get('/store', 'ChatConversationController@store')->name('store'); Route::get('/edit', 'ChatConversationController@edit')->name('edit'); Route::post('/update', 'ChatConversationController@update')->name('update'); ?> コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

修正方法だけ書いても成長できないと思うので、拙いですがデバッグの方法を説明します。

$record = ChatConversation::find($request->id); $record->node_id = $request->node_id; // <-- ここ

失敗しているのはここの行で間違いないでしょうか?

エラーが発生しているなら、なんのファイルの、何行目というのが
エラーメッセージと合わせて一緒に出てくるはずです。
質問をする際にも、合わせて記載すると、回答者もエラー発生箇所が簡単に特定できるので回答がしやすいです。
今回のエラーを解消するにはまず
「なんのファイル、何行目」を確認します。
今回は、ChatConversationController.php32行目と仮定(推定)しています。
そして、次にエラーメッセージの内容を確認します。
Creating default object from empty value
ですので、だいたい「空のvalueはオブジェクトの作成に使用できません」です。
英語がわからなければ、グーグル翻訳でもいいので、翻訳してエラーの意味をまず理解しましょう。
では、なぜ空のvalueと言われているのか考えましょう。
ここで、オブジェクトのようにしようし、かつ空である可能性があるのは
$record変数、とだいたい推察できます。
そこで、$recordをddしてみましょう

$record = ChatConversation::find($request->id); dd($record); $record->node_id = $request->node_id;

こんな感じです。おそらくnullと出力されるでしょう。
これで、findが失敗していることに気づくことができるでしょう。
ではなぜ失敗するか、データがデータベースに登録されているでしょうか?
されていない場合、findに失敗する事もあるでしょう。
ですが、今回はデータベースに正常にデータが入っていると仮定してデバッグを続けます。

それでは、データベースのデータは入っているのになぜ失敗するのでしょうか?
また、ddの出番です。今度は$request->idをddし、目的のidをちゃんと探しているかを確認しましょう。

dd($request->id); $record = ChatConversation::find($request->id); $record->node_id = $request->node_id;

こんな感じです。またnullですね?
ここまでデバッグすればそもそも、idが送信されていない事に気づけるのではないでしょうか。
では、なぜidが送信されないのか、viewをみてみましょう。

{{Form::open(['action' => 'ChatConversationController@update','method'=>'Post'])}} <label>node_id:<input type="text" name="node_id" value='{{ $record->node_id }}'></label><br> <label>line_id:<input type="text" name="line_id" value='{{ $record->line_id }}'></label><br> <label>message:<input type="text" name="message" value='{{ $record->message }}'></label><br> <label>version_type:<input type="text" name="version_type" value='{{ $record->version_type}}'></label><br> <label>ip_addr:<input type="text" name="ip_addr" value='{{ $record->ip_addr }}'></label><br> <label>platform:<input type="text" name="platform" value='{{ $record->platform}}'></label><br> <label>translate:<input type="text" name="translate" value='{{ $record->translate }}'></label><br> <input type="submit" name="post" value="Send"> {{Form::close()}}

viewの中に、nameがidのinputがありません。
これでは、idが送られてこないのも当然です。
ここまで説明したらあとはどのように修正すればよいか、わかってもらえるかと思います。

投稿2020/01/03 13:09

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaturePy

2020/01/03 13:44

かなりご丁寧な解説ありがとうございました。 変数が空だったのですね。 エラーがある場合はまずは新たな解決法を探すよりも自分の加えたコードに対して疑うべきですね。 今回教えて頂いたデバック法のようにどんどん遡って解決していくようにします。 データは取れていると思い込んでいてデバックを軽んじました。
amaturePy

2020/01/03 13:53

デバックを行い。エラーの原因箇所を修正して、理想の動作を確認致しました。 貴重なお時間ありがとうございました。 ピュアPHPの方も進めて、より理解を深めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問