访问同一模型laravel中的belongsTo方法

时间:2016-10-29 20:49:20

标签: laravel model eloquent foreign-keys

我使用此模型但使用此模型显示以下错误:

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);
    }
}

1 个答案:

答案 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)
    ];
}