Laravel:试图获得非对象的属性

时间:2016-12-20 13:25:59

标签: php mysql laravel

我一直在Laravel框架中编写Web应用程序,并且遇到了为用户获取某些数据时遇到的问题。我的Web应用程序的用户结构基于主用户表,然后我有一个RP表,用于所有用户的统计信息,如健康,能源,他们拥有的项目等。

访问页面时,我试图显示此数据,我收到以下错误

Trying to get property of non-object (View: C:\workspace\mainwebsite\resources\views\frontend\home.blade.php)

O只是试图为用户打印出角色扮演表的user_id列(是的,我尝试过其他列输出相同的结果)

<div class="panel panel-default">
    <div class="panel-body">
        {{ Auth::user()->roleplay->user_id }}
    </div>
</div>

这是我的用户表类:

<?php
namespace App\Database\Website\User;

use Hash;
use Eloquent;
use \Illuminate\Auth\Authenticatable;
use \Illuminate\Contracts\Auth\Authenticatable as Authentication;

class Player extends Eloquent implements Authentication
{
    use Authenticatable;

    protected $primaryKey   = 'id';
    protected $table        = 'users';
    public $timestamps      = false;
    protected $fillable     = [];

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = Hash::make($value);
    }

    public function setUsernameAttribute($value)
    {
        return $this->attributes['username'] = $value;
    }

    public function roleplay()
    {
        return $this->hasOne('App\Database\Website\User\Roleplay', 'user_id');
    }
}

这是我的角色扮演表类:

<?php
namespace App\Database\Website\User;

use Eloquent;

class Roleplay extends Eloquent
{
    protected $primaryKey   = 'id';
    protected $table        = 'srp_user_statistics';
    public $timestamps      = false;
    protected $fillable     = ['user_id'];

    public function user()
    {
        return $this->belongsTo('App\Database\Website\User\Player', 'user_id', 'id');
    }

}

4 个答案:

答案 0 :(得分:0)

通过查看您的问题,您似乎在没有实际检查CreateLogger<T>最初返回的内容的情况下获取用户的角色扮演。如果没有任何经过身份验证的用户,则返回null。

在从auth获取用户之前,您应该使用auth()->check()

auth()->user()
  

如果用户当前已通过身份验证,则应获取用户详细信息。 <div class="panel panel-default"> <div class="panel-body"> {{ (auth()->check()) ? auth()->user()->roleplay->user_id : '' }} </div> </div> 返回一个布尔值 - false:如果用户未经过身份验证,则返回true

希望这有帮助!

答案 1 :(得分:0)

可能是您的网络应用中的身份验证无效。

答案 2 :(得分:0)

这是非常基本的调试,您只需要弄清楚该表达式的哪个部分没有返回对象。

如果用户没有登录,那么Auth::user()将返回null,因为您之后链接->roleplay,它会给您出错。

如果Auth::user()返回了一些内容但Auth::user()->roleplay返回null,则会出现此错误,因为您尝试将->user_id链接到null的末尾。可能的原因是数据库中没有登录用户的roleplay数据,或者您的关系出现问题。

答案 3 :(得分:0)

检查以确保您当前的用户有roleplay个对象。对于空关系,Eloquent将返回null

<div class="panel panel-default">
   @if(Auth::user()->roleplay)
    <div class="panel-body">
        {{ Auth::user()->roleplay->user_id }}
    </div>
    @endif
</div>

问题:为什么不直接获取授权用户的ID({{Auth::user()->id}})?看来角色扮演对象无论如何都与该id上的用户有关;为什么要通过一段关系获取你已经拥有的身份证?

相关:

Laravel Blade template how to return null instead of ErrorException when trying to get property of non-object