如何在Laravel 5.4中从一个到多个多态关系中获得单个记录

时间:2017-02-05 11:14:40

标签: laravel laravel-5 eloquent laravel-eloquent

我有两个具有One to Many多态关系的模型,如:

class Address extends Model
{
    public function addressable()
    {
        return $this->morphTo();
    }
}


class User extends Authenticatable
{
    public function addresses()
    {
        return $this->morphMany('App\Address', 'addressable');
    }
}

在地址模型中,有一个名为is_primary的列,一个用户只能有一个主地址。现在在用户更新表单中,我想仅从地址模型获取主地址。

我知道我可以提取所有地址并检查哪一个是主要地址或者这个:

public function primaryAddress()
{
    return $this->addresses()->where('is_primary',true)->first();
}

但问题是表单字段没有获取值,我想访问主要地址,如$user->address_line_1

我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

你可以使用一个访问器:

    public function getPrimaryAddressAttribute()
{
    return $this->addresses()->where('is_primary',true)->first();
}

现在你得到$ user-> primary_address

如果您想直接访问这些行,请执行以下操作:

    public function getAddressLine1Attribute()
{
    return $this->addresses()->where('is_primary',true)->first()->address_line_1;
}