我使用此模型但使用此模型显示以下错误:
Failed calling App\User::jsonSerialize()
但删除“$ this-> customer-> name”结果还可以。 thanksssssssssssssssssssssssssssssssssssssssssssssssssssssssssss。
class User extends Authenticatable
{
/**
* Get the user's customer name.
*
* @param string $value
* @return array
*/
public function getCustomerIdAttribute($value)
{
return [
'id' => $value,
'name' => $this->customer->name
];
}
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'customer_id' => 'array',
];
/**
* Get the customer record associated with the user.
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
}
答案 0 :(得分:0)
您的问题是$this->customer
正在返回null
,这导致$this->customer->name
导致错误。
当您json_encode
模型,或将其转换为字符串,或以其他方式调用toJson
时,它将调用jsonSerialize()
方法。
在某些时候,这最终会调用您已定义的getCustomerIdAttribute()
访问者。在此访问器中,您有语句$this->customer->name
。但是,如果当前模型与客户记录无关,则$this->customer
将返回null
,然后$this->customer->name
将导致错误。 $this->customer->name
导致错误时,会导致jsonSerialize()
失败。
在您的访问者中,只需确保在尝试访问$this->customer
属性之前检查name
是否有效:
public function getCustomerIdAttribute($value)
{
return [
'id' => $value,
'name' => ($this->customer ? $this->customer->name : null)
];
}