2016-12-20 12 views
1

私はLaravelフレームワークでWebアプリケーションを作成しており、ユーザーの特定のデータを取得する際に問題が発生しています。私のWebアプリケーションのユーザ構造は、メインユーザテーブルに基づいており、健康、エネルギー、自分が所有するアイテムなどのすべてのユーザ統計のRPテーブルを持っています。Laravel:非オブジェクトのプロパティを取得しようとしています

私は次のようなエラーに

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

Oは、単にユーザーのためのロールプレイテーブルのuser_idの列をプリントアウトしてみました(はい、私を受け付けております上、このデータを表示しようとしているページを訪問

<?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'); 
    } 
} 
:ここ

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

は私のユーザー・テーブル・クラスである)他の列彼らは出力と同じ結果を試みていますここ

は私のロールプレイテーブルクラスです:

<?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

現在のユーザーが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のユーザーと関連しているようです。なぜあなたはすでに持っているIDを取得するために関係を通過するのですか?

関連:だから

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

0

あなたの問題を見て、あなたが実際にどのようなauth()->user()はもともと戻っていることを確認することなく、ユーザーのロールプレイを取得しているようです。認証されたユーザがいない場合、nullを返します。

あなたは、このように認証からユーザーをフェッチする前にauth()->check()を使用する必要があります。

<div class="panel panel-default"> 
    <div class="panel-body"> 
     {{ (auth()->check()) ? auth()->user()->roleplay->user_id : '' }} 
    </div> 
</div> 

ユーザーが現在認証されている場合は、ユーザーの詳細情報を取得する必要があります。 auth()->check()はブール値を返します。 - false:ユーザーが認証されていない場合はtrueを返します。

希望します。

+0

私はすでに、私はちょうど認証からデータを取得することができますので、私が認証しています知っている::ユーザー() –

+0

、エラーが発生したライン上を得ていますか? –

0

おそらく、認証はあなたのWebアプリケーションでは機能しません。

+0

私はすでにAuth :: user()からデータを取得できるので、私は認証されていることを知っています。 –

0

これはかなり基本的なデバッグですが、その式のどの部分がオブジェクトを返さないのか把握する必要があります。

ユーザーがログインしていない場合、Auth::user()はnullを返し、それ以降は->roleplayを連鎖しているため、このエラーが発生します。

Auth::user()->roleplayが返すものの、nullの場合は->user_idをnullの最後に連結しようとしているため、このエラーが発生します。おそらく、ログインしたユーザーのデータベースにはroleplayというデータがないか、関係に何か問題があります。

関連する問題