2017-03-27 5 views
1

私はこの質問をはっきりと書くつもりです。これまでのように、私は有用な回答を得ていません。人々は私のAuth :: user()がnullであると思っているようです。あるいは何かを間違って設定しています。私はあなたがそうでないことを保証することができます。Laravel hasOne関係がddでnullを返す

私は最近Laravel 5.3でアプリケーションをコード化し、今 Laravel 5.4 にスクラッチを開始していると私は動作するように簡単なhasOneの関係を取得しようとしています。

テーブルusersの各レコードのレコードを保持するテーブルがsrp_user_statisticsであり、そのユーザーの統計情報が保持されています。表usersの主キーはidで、テーブルsrp_user_statisticsの主キーは、私はuser_idはので、この場合には、テーブルusersの列idに等しいテーブルsrp_user_statisticsにユーザーレコードを取得しようとしていますuser_id

あるAuth::user()->id

この関係は、Laravel 5.3では完全に機能しましたが、Laravel 5.4では機能していないようです。私がチェックしたことの下に、私が他のフォーラムサイトで尋ねた以前の質問のようなものを仮定するのを避けるためにリストアップします。

認証::ユーザーは、()はnull、それが44個の属性やっていない場合:
dd(Auth::user());

がどのように関係がnullである知っているのですか?私はそれをどのようにチェックするのですか?したがって、最初に、私はこれをやったときに私のブレードビューhome.blade.php{{ Auth::user()->roleplay->user_id }}を使用して列を印刷しようとすることで、それをチェックしTrying to get property of non-object

がどのように「それはにISN知っていることを示すlaravelによってエラーページで私を迎えています
その列だけ?
私はdd(Auth::user()->roleplay)を行なったし、それはここでnull


を返されたが、私のPlayer.phpあり、ここではテーブルuser

<?php 
namespace App\Database\Frontend\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\Frontend\User\Roleplay', 'user_id'); 
    } 
} 


を制御するクラスは私のRoleplay.php、テーブルを制御するクラスですsrp_user_statistics

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

use Eloquent; 

class Roleplay extends Eloquent 
{ 
    protected $primaryKey = 'user_id'; 
    protected $table  = 'srp_user_statistics'; 
    public $timestamps  = true; 
    protected $guarded = ['user_id']; 

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

    public function government_role() 
    { 
     return $this->belongsTo('App\Database\Frontend\Roleplay\GovernmentRole', 'government_id'); 
    } 
} 

エラーログは次のとおりです。whe nはそれは私が他に何を試してみましたTrying to get property of non-object

in HomeController.php line 16 
at HandleExceptions->handleError(8, 'Trying to get property of non-object', 'C:\\rcms_r\\app\\Http\\Controllers\\Frontend\\User\\HomeController.php', 16, array()) in HomeController.php line 16 
at HomeController->getView() 
at call_user_func_array(array(object(HomeController), 'getView'), array()) in Controller.php line 55 
at Controller->callAction('getView', array()) in ControllerDispatcher.php line 44 
at ControllerDispatcher->dispatch(object(Route), object(HomeController), 'getView') in Route.php line 203 
at Route->runController() in Route.php line 160 
at Route->run() in Router.php line 559 
at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 30 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41 
at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Authenticate.php line 43 
at Authenticate->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65 
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64 
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102 
at Pipeline->then(object(Closure)) in Router.php line 561 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520 
at Router->dispatchToRoute(object(Request)) in Router.php line 498 
at Router->dispatch(object(Request)) in Kernel.php line 174 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 30 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30 
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30 
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ValidatePostSize.php line 27 
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102 
at Pipeline->then(object(Closure)) in Kernel.php line 149 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116 
at Kernel->handle(object(Request)) in index.php line 53 


を表示しますか?
リレーションのパラメータを変更、削除、追加、変更しようとしましたが、このリレーションシップが機能するようには思われません。

+0

さて、あなたは、DBに挿入され、ユーザに接続イメージプレイがある絶対に確信していますか? '$ r = Roleplay ::( 'user_id'、Auth :: user() - > id) - > first()'の結果はどうですか? – devk

+0

そのコードは、そのレコードのデータとともに、行全体を返します。ここに投稿するにはあまりにも多くのコンテンツが必要です.https://gist.github.com/Seriosk/0ccec7a3930ed72077b7e39cfa706df4 –

+0

そうです良い。あなたの関係で何かをしなければなりません。 – devk

答えて

0

この場合、関係は次のように定義する必要があります。

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

変更role_idあなたはplayersテーブルで使用する外部キーの実際の名前に。

Eloquentは、モデル名に基づいてリレーションシップの外部キーを決定します。この場合、Phoneモデルは自動的にuser_id外部キーを持つとみなされます。この規約をオーバーライドする場合は、2番目の引数をhasOneメソッドに渡すことができます。

さらに、Eloquentは、外部キーが、親のid(またはcustom $ primaryKey)列と一致する値を持つ必要があるとみなします。言い換えれば、EloquentはPhoneレコードのuser_id列のユーザーのid列の値を探します。関係でid以外の値を使用する場合は、カスタムキーを指定するhasOneメソッドに3番目の引数を渡すことができます。

https://laravel.com/docs/5.4/eloquent-relationships#one-to-one

+0

クラス 'Player'の私の関係を、あなたが入れたものに変更しました。 'role_id'を' id'(テーブル 'users'の識別子)に置き換えましたが、何も変更されていません。私はまだ返されるnull配列を取得します。 –

+0

列 'id'は私の' users'表のレコードを識別するために使用するものですが、それは私が置くべき列ではありませんか?これは、レコードの識別子を表す私のユーザテーブルにある唯一のカラムです。あなたがもっと詳しく説明したら、それは助けになるでしょう。 –

+0

@LilSav更新されたコードを試してください。 –

関連する問題