Laravel 处理返回null的belongsTo()

Laravel 处理返回null的belongsTo(),laravel,laravel-5,laravel-5.5,Laravel,Laravel 5,Laravel 5.5,我有一个模型(请求),它根据客户对象的id返回客户对象,它从另一台机器接收id,因此我希望将不存在的值(即不存在的id返回的eloquent为null) 因此: 公共功能客户() { 返回$this->belongsTo('App\Customer','site\u user'); } 我尝试了以下方法: 公共函数getSiteUserAttribute() { 如果(!$this->relationLoaded('customer')){ $this->load('customer'); }

我有一个模型(请求),它根据客户对象的id返回客户对象,它从另一台机器接收id,因此我希望将不存在的值(即不存在的id返回的eloquent为null)

因此:

公共功能客户()
{
返回$this->belongsTo('App\Customer','site\u user');
}
我尝试了以下方法:

公共函数getSiteUserAttribute()
{
如果(!$this->relationLoaded('customer')){
$this->load('customer');
}
返回$this->getRelation('customer')?:$this->nullCustomer();
}
nullCustomer()

private函数nullCustomer()
{
$nonExist='不存在的客户';
$siteUser=new\light\Support\Collection;
$siteUser->first_name=$nonExist;
$siteUser->last_name=$nonExist;
$siteUser->email=$nonExist;
返回$siteUser;
}
然而,拉威尔返回了一个我无法理解的错误:

未定义属性:App\Request::$site\u用户(视图:/../../index.blade.php)`
它显然与
getSiteUserAttribute()
有关,后者推断
site\u user
,但我不明白问题出在哪里

我可以
isset()
调用此关系的每个地方,但我使用的是智能框架,因此我怀疑这是否是最佳实践

只是重申一下,我正在尝试处理null
belongsTo()
,这不会破坏视图。

重写
nullCustomer()
以返回
App\Customer
而不是
\illumb\Support\Collection
: 不过我还没有测试过

private function nullCustomer()
{
    $nonExist = 'non-exist-customer';

    $siteUser = new \App\Customer;
    $siteUser->first_name = $nonExist;
    $siteUser->last_name = $nonExist;
    $siteUser->email = $nonExist;

    return $siteUser;
}

似乎site_用户字段和site_用户属性是混合的


消除混淆的最简单方法是将字段重命名为site\u user\u id

,正如Murat Tutumlu所说,不能同时拥有
site\u user
属性和
getSiteUserAttribute()
访问器

可以使用以下命令指定默认值:

公共功能客户()
{
返回$this->belongsTo('App\Customer','site\u user'))
->默认([
“first_name”=>“不存在的客户”,
'姓氏'=>'不存在的客户',
'电子邮件'=>'不存在的客户'
]);
}

使用
getSiteUserAttribute
方法中定义的内容,不是应该使用
siteUser
而不是
siteUser
吗?