書籍に関するFAQ

書籍についてのご質問をまとめています。

first()やfind(1)メソッドを使うとエラーになる

Laravelの教科書P230~231

7-3-5なのですが、get()までは問題なく表示されていたのですが、first()やfind(1)メソッドに書き換えますとエラーが出ました。Attempt to read property “title” on boolと出ます。

first や find で レコードを1つだけ取得する場合は
$post = Post::where…………->find(1);
のように、単数前提で代入する必要があります。

get() や all() で取得するときは、$posts = の用にコレクションで複数要素として代入しました。

コレクションの場合は、foreach や 他のコレクション型のメソッドを使って一つづつの要素を取り出してから使う必要がありましたが、first()の場合は、取り出したあとの単数がすでに 変数に入っているということになります。

コレクションではない時にforeach を使うとエラーになります。findやfirstを使った使った場合には、foreachはビュー側から取り除いておきましょう。

なおコーディングするうえで考えないといけないポイントがあります。

該当するデータが無い場合の処理です。

たとえば、$post = xxxxx->find(900) など 存在しない id をfind の引数に入れたときや、first()でも1軒も該当するレコードがない場合は、$post に値が入っていない状態になります。

そのため、$post->title などと使用する前に
@if (isset($post))
@endif
のようにしておくと、存在する場合だけ値を処理できます。

{{ Auth::user()->name }}でエラーになる

app.blade.phpでnavigation.blade.phpをincludeしているようなのですが、その中に

{{ Auth::user()->name }}

という箇所があります。そこでエラーになっているようです。userオブジェクトが取得できていないようです。

 navigation.blade.php内の<div>{{ Auth::user()->name }}</div>でエラーが発生しているとのことですが、
こちらのエラーは、通常、ユーザー情報が正しく取得できていない場合に見られます。
特に、ログインしていない状態でこのコードを実行しようとすると、Auth::user()nullを返すため、null->nameとなりエラーが生じます。
ログインした上で、動作をお試しいただけますか。
{{ Auth::user()->name }}は、Authファサードを使用しています。
このコードにより、現在認証されているユーザーの情報を簡単に取得することができます。
ご質問のUsersControllerは 必要ありません。
なおAuth::user() はログインしていないと取得できないので
実際に使用する場合は、下記のようなログインチェック用のコードをいれても良いかと思います。
(下記はコードの例となります。)
===
◆コントローラにおけるログインチェック

◆Blade.phpにおけるログインチェック


あるいは、

40代からプログラミング!
タイトルとURLをコピーしました