Laravel试图获得非对象错误的属性

时间:2017-03-27 16:34:10

标签: php laravel

我正试图在laravel中创建我自己的upvote / downvote系统,但我一直收到这个错误。 但是,只有当用户未对其中一个正在显示的帖子进行投票时才会显示此错误作为示例我向用户显示所有帖子并使用getvote($ post_id)函数进行检查。只有当用户没有在其中一个帖子上投票时才会出现错误,但如果他对所有帖子进行了投票,那么错误就不会出现。这是我的代码,以澄清更多:

public function getVote($post_id) 
{
  $username = Session::get('username');
  if(isset($username)) {
  $uservote = PostVotes::where([
        'post_id' => $post_id,
        'username' => $username,
    ])
    ->first();
    $vote = $uservote->vote;
   if(!$vote)
   {
     return;
   }
   return $vote;  
  } else {
    return null;
  }
}

查看

@foreach ($posts as $post)
  <div class="container">
  <div class="posts">
  <div class="card">
  {{$post->getVote($post_id)}}
      <img class="card-img-top" href="#" src="{{$post->image}}" alt="Card image cap">
      <div class="card-block">
          <h4 class="card-title">{{$post->title}}</h4>
          <div class="vote">
          <i class="fa fa-smile-o fa-fw green" aria-hidden="true" data-value="1" data-id="{{$post->post_id}}"></i>
          <i class="fa fa-frown-o " aria-hidden="true" data-value="-1" data-id="{{$post->post_id}}"> {{$post->score}}</i>
          </div>
          <p class="card-text"><small class="text-muted" id="getDate" data-date="{{$post->created_at}}"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i></small>
            by <a href="profile/{{$post->username}}"> {{$post->username}}</a></p>
      </div>
  </div>
</div>
</div>
@endforeach

1 个答案:

答案 0 :(得分:1)

您的错误

  

尝试获取非对象错误的属性

因为您的代码未验证

而发生
$uservote = PostVotes::where([
      'post_id' => $post_id,
      'username' => $username,
  ])->first();

返回一个元素。请记住,如果Eloquent模型与任何内容都不匹配,则会返回null

在这种情况下,$vote = $uservote->vote;将尝试获取vote的{​​{1}}属性 - 这将引发异常

相反,检查$ uservote是否实际返回一个带有简单if语句的元素:

null