ボタンを押してクラスメソッドを実行したさい、
Symfony\Component\Debug\Exception\FatalThrowableError Call to a member function load() on null
というエラーが出ます。
存在しないユーザーでload()を呼び出そうとしているエラーだと思いますが、どうすればこれを防ぐことができますか?
SELECT id, name FROM users ORDER BY id;でSQLを直接実行しユーザーが存在するこを確認しました。
id | name
----+-------
8 | Tikka
(1 row)
追記
環境
Laravel:Laravel Framework 6.18.20
OS: Windows10
Laravelのログ
local.ERROR: Trying to get property 'articles' of non-object {"userId":8,"exception":"[object] (ErrorException(code: 0): Trying to get property 'articles' of non-object at /var/www/app/Http/Controllers/UserController.php:20)
articlesを定義しているコード
<?php namespace App\Http\Controllers; use App\Article; use App\Comment; use App\Tag; use Illuminate\Http\Request; use App\Http\Requests\ArticleRequest; class ArticleController extends Controller { public function __construct() { $this->authorizeResource(Article::class, 'article'); } public function index() { $articles = Article::with(['user', 'likes', 'tags']) ->orderByDesc('created_at') ->paginate(5); return view('articles.index', ['articles' => $articles]); }
ソースコード
<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; class UserController extends Controller { public function show(string $name) { $user = User::where('name', $name)->first() ->load(['articles.user', 'articles.likes', 'articles.tags']); // ここがNullになってしまう $articles = $user->articles->sortByDesc('created_at'); return view('users.show', [ 'user' => $user, 'articles' => $articles, ]); } public function edit(string $name) { $user = User::where('name', $name)->first(); // UserPolicyのupdateメソッドでアクセス制限 $this->authorize('update', $user); return view('users.edit', ['user' => $user]); }
user.blade.php
<a href="{{ route('users.edit', ['name' => Auth::user()->name]) }}" class="btn btn-warning btn-rounded d-flex justify-content-center align-items-center h-100 m-0 p-1"> プロフィール編集 </a>
足りないコードがあれば追記します。
回答1件
あなたの回答
tips
プレビュー