Возникла исключительная ситуация ErrorException с сообщением «Попытка получить свойство« пользователь »необъекта - PullRequest
0 голосов
/ 08 января 2020

Я использую отношения в своем laravel проекте. Я пытаюсь показать свой пост и ответы. Но я продолжаю получать эту ошибку. Я пробовал различные решения, но ни один из них не сработал. Кто-нибудь может мне помочь?

Модель сообщения:

protected $fillable = [
                'title', 'content', 'category_id' , 'slug', 'user_id',
            ];
public function user1()
        {
                return $this->belongsTo('App\User');
        }
public function replies()
        {
                return $this->hasMany('App\Reply');
        }

Модель ответа:

  protected $fillable = ['content','user_id','posts_id'];


    public function post(){
        return $this->belongsTo('App\Post');
    }

    public function user()
    {
        return $this->belongsTo('App\User');
    }

PostController:

public function shro($slug)
    {
        $pst= Post::where('slug',$slug)->first();
        return view('posts.show')->with('p', $pst);
    }

show.blade. php

<div class="panel panel-default">
    <div class="panel-heading">

    <img src="/uploads/avatars/{{ $p->user->avatar }}" alt="" width="70px" height="60px">&nbsp;&nbsp;&nbsp;
    <span>{{ $p->user->name }}, <b>{{ $p->created_at->diffForHumans() }}</b></span></br>


    </div>

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Вы можете сразу загрузить пользователя соответствующим постом, выполнив:

    //...
    $pst= Post::where('slug',$slug)->with(['user1'])->first();
    //...
0 голосов
/ 08 января 2020

$p или $pst (сбивающие с толку имена переменных) равно null, и это потому, что ->first() может вернуть null. У вас есть Post запись в вашей базе данных, которая соответствует slug?

Правило большого пальца; никогда не предполагайте, что что-то существует .

Добавьте логи c, чтобы убедиться, что Post существует, прежде чем пытаться получить доступ к его свойству:

$post = Post::where("slug", $slug)->first();
if(!$post){
  abort(404);
}
return view('posts.show')->with('post', $post);

// OR

$post = Post::where("slug", $slug)->findOrFail(); // or firstOrFail();
return view('posts.show')->with('post', $post);

Также, проверьте $post->user:

@if($post->user)
<img src="/uploads/avatars/{{ $post->user->avatar }}" width="70px" height="60px"/>
<span>{{ $post->user->name }}, <b>{{ $post->created_at->diffForHumans() }}</b></span></br>
@endif

Если $post->user вернет null, у вас будет похожая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...