如何查询特定类类型的多对多关系?

时间:2018-08-25 17:34:57

标签: php laravel-5

我已经创建了表:addressescontactseventsaddressables

这里addressables (id, address_id, addressable_id, addressable_type)contactsevents的地址具有多对多态关系。

我定义了以下模型:

地址:

class Address extends Model
{
    protected $fillable = [...];

    public function addressable()
    {
        $this->morphTo();
    }
}

联系方式:

class Contact extends Model
{
    protected $fillable = [...];

    public function addresses()
    {
        return $this->morphToMany(Address::class, 'addressable');
    }
}

事件:

class Event extends Model
{
    protected $fillable = [...];

    public function addresses()
    {
        return $this->morphToMany(Address::class, 'addressable');
    }
}

现在,我想通过联系人或事件或定义的任何其他模型来获取所有地址。是否可以在不定义Address模型中的以下函数的情况下按特定类型获取地址?非常感谢您的帮助。

public function contacts()
{
    return $this->morphedByMany('Contact', 'addressable');
}


public function events()
{
    return $this->morphedByMany('Event', 'addressable');
}

如果可能的话,我该如何解决?

预期:

$contactAddress = Address::getAddressable('App\Contact');
$eventAddress = Address::getAddressable('App\Event');

1 个答案:

答案 0 :(得分:1)

您可以使用C:\Users\myName关系:

addresses

作为单独的方法:

$contactAddress = Contact::with('addresses')->get()->pluck('addresses')->flatten();