簡體   English   中英

Laravel有一個關系在dd上返回null

[英]Laravel hasOne relationship returning null on dd

我將嘗試清楚地寫出這個問題,因為過去我沒有收到任何有用的答案。 人們似乎認為我的Auth :: user()為null,或者我設置錯誤。 我可以向你保證並非如此。

我最近在Laravel 5.3中編寫了一個應用程序,現在已經開始使用Laravel 5.4了 ,我試圖讓一個簡單的hasOne關系起作用。

我有一個名為srp_user_statistics表,它保存表users每條記錄的記錄,它保存該用戶的統計信息。 users中的主鍵是id ,表srp_user_statistics的主鍵是user_id

我試圖在表srp_user_statistics中獲取用戶記錄,其中user_id等於表users的列id ,因此在這種情況下Auth::user()->id

這種關系在Laravel 5.3中完美運行,但它似乎不適用於Laravel 5.4。 我將在下面列出我檢查的內容,以避免人們假設我之前在其他論壇網站上提出的問題。

Auth :: user()不為null,它在執行時有44個屬性:
dd(Auth::user());

我怎么知道這段關系是空的? 我怎么檢查它?
所以首先,我通過在我的刀片視圖home.blade.php使用{{ Auth::user()->roleplay->user_id }} home.blade.php {{ Auth::user()->roleplay->user_id }}嘗試打印列來檢查它,當我這樣做時,我home.blade.php了一個錯誤頁面laravel聲明Trying to get property of non-object

你怎么知道它不只是那個專欄?
我做了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');
    }
}

這是顯示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


還有什么我試過的?
我已經嘗試更改關系參數,刪除,添加和修改它們,但似乎什么都不會使這種關系工作。

在這種情況下,關系應該定義如下:

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

role_id更改為您在players表中使用的外鍵的實際名稱。

Eloquent根據模型名稱確定關系的外鍵。 在這種情況下,自動假定Phone模型具有user_id外鍵。 如果要覆蓋此約定,可以將第二個參數傳遞給hasOne方法。

此外,Eloquent假定外鍵應具有與父級的id(或自定義$ primaryKey)列匹配的值。 換句話說,Eloquent將在電話記錄的user_id列中查找用戶id列的值。 如果您希望關系使用除id之外的值,則可以將第三個參數傳遞給指定自定義鍵的hasOne方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM