我将尝试清楚地写出这个问题,因为过去我没有收到任何有用的答案。人们似乎认为我的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
等于表id
中的列users
,因此在这种情况下Auth::user()->id
这种关系在Laravel 5.3中完美运行,但它似乎不适用于Laravel 5.4。我将在下面列出我检查过的内容,以避免人们假设我在其他论坛网站上提出过的问题。
Auth :: user()非空,在执行时有44个属性:
dd(Auth::user());
我怎么知道这段关系是空的?我怎么检查呢?
首先,我在我的刀片视图{{ Auth::user()->roleplay->user_id }}
中尝试使用home.blade.php
打印列时进行检查,这样做时我会看到一个错误页面,说明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
我还尝试了什么?
我已经尝试更改关系参数,删除,添加和修改它们,但似乎没有任何东西可以使这种关系起作用。
答案 0 :(得分:0)
在这种情况下,关系应该像这样定义:
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方法。