我一直在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');
}
}
答案 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上的用户有关;为什么要通过一段关系获取你已经拥有的身份证?
相关: