書籍についてのご質問をまとめています。
first()やfind(1)メソッドを使うとエラーになる
Laravelの教科書P230~231
first や find で レコードを1つだけ取得する場合は
$post = Post::where…………->find(
のように、単数前提で代入する必要があります。
get() や all() で取得するときは、$posts = の用にコレクションで複数要素として代入しました。
コレクションの場合は、foreach や 他のコレクション型のメソッドを使って一つづつの要素を取り出し
コレクションではない時にforeach を使うとエラーになります。findやfirstを使った使った場合には、foreachはビュー側から取り除いておきましょう。
なおコーディングするうえで考えないといけないポイントがあります。
該当する
たとえば、$post = xxxxx->find(900) など 存在しない id をfind の引数に入れたときや、first()でも1軒も該当するレコードがない場合は、$po
そのため、$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>
でエラーが発生しているとのことですが、Au th::user()
がnull
を返すため、null-> name
となりエラーが生じます。ログインした上で、動作をお試しいただけますか。
Auth
ファサードを使用しています。UsersController
は 必要ありません。実際に使用する場合は、
1 2 3 |
if (!Auth::check()) { // ユーザーはログインしていない } |
◆Blade.phpにおけるログインチェック
1 2 3 4 |
@guest // ユーザーはログインしていない <p>ログインしてください</p> @endguest |
あるいは、
1 2 3 4 |
@auth // ユーザーは認証済み(ログイン済み) <p>ようこそ、{{ Auth::user()->name }}さん</p> @endauth |
Laravel Sail環境で環境構築を試しているが、401 Unauthorizedエラーで先に進めない
test-projectを作成するコマンドを実行すると下記エラーがでて先に進めません。プロジェクトも作成できていません。
docker: Error response from daemon: failed to resolve reference “docker.io/laravelsail/php84-composer:latest”:
failed to authorize: failed to fetch oauth token: unexpected status from GET request to ***
401 Unauthorized
Run ‘docker run –help’ for more information
bash: line 17: cd: test-project: No such file or directory
bash: line 23: ./vendor/bin/sail: No such file or directory
bash: line 24: ./vendor/bin/sail: No such file or directory
メッセージから判断すると、OAuth トークンの取得に失敗して 401 Unauthorized が返り、Laravel Sail のイメージを pull できずにプロジェクト生成が途中で止まったようです。
通常は Docker Desktop にサインインしなくても Sail プロジェクトを作れますが、
①Desktop Dockerを開き、右上の「Sign in」をクリックし、Docker Hub にログインを行ってから、プロジェクト作成してみていただけますか?
②なおらない場合には、 Ubuntuでdocker logoutを実施した後、docker login -u <my-user-name>を行ってみてください。my-user-nameには、
無事ログインできたら、プロジェクトを作成してください。