こんにちは、laravlの勉強をしています。
先日下記の質問をさせていただきました。
フォームの値をリレーション先のテーブル値の編集
上記の疑問は解決したのですが、
今度はまた新たな疑問が出てきました。
先日質問した内容はリレーション先のテーブル値の編集でしたが、
今度はリレーション先のテーブル値の取得についてです。
php
1<table> 2 <dt class="col-sm-3">名前</dt> 3 <dd class="col-sm-9">{{ $user->name }}</dd> # 値がなくても問題なく画面が表示される 4 <dt class="col-sm-3">自己PR</dt> 5 <dd class="col-sm-9">{{ $user->user_detail_profile->user_strength }}</dd> # 値がないとエラー画面へ 6</table>
bladeファイルで、Userモデルの値と、Userモデルに紐づいたUserProfileの値を出力しようとしています。
Userモデルの値は値の存在チェックをしなくてもエラーは出ませんが、
UserProfileモデルの値については存在チェックをしなければ、エラー画面が表示されてしまいます。
率直にこの差はなんだろうということです。
一応下記のように値チェックをすれば、エラー画面表示は回避できるのですが、
フォーム項目が多い場に都度チェックするのは、あまりスマートな書き方ではない気がします。
<dt class="col-sm-3">自己PR</dt> @if(isset($user->user_detail_profile)) <dd class="col-sm-9">{{ $user->user_detail_profile->user_strength }}</dd> @else <dd class="col-sm-9"></dd> @endif
この場合、みなさまどのように書いていますでしょうか。
ご教授いただければと思います。
追記
crhgさん、kawaxさん
早速の回答誠にありがとうございます。
optional()でもkawaxさんに最初にご提案いただいた下記の方法でも上手くいけました。
php
1{{ $user->user_detail_profile->user_strength ?? '' }}
少し調べてみたところ、どうやら値がnullかどうかではなく、
リレーション先のテーブルにレコードがない場合に同様のエラーが出ているようでした。
(値がnullでもレコードがあればエラー画面は表示されませんでした)
ちなみに別アプローチで、Userモデルに新しくレコードを追加した際に、
UserProfileモデルに自動で値を追加する方法などはLaravelで用意されてたりしますか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。