首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查询特定类类型的多对多多态关系?

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

Stack Overflow用户
提问于 2018-08-26 01:34:57
回答 1查看 27关注 0票数 0

我已经创建了表:addressescontactseventsaddressables

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

我定义了以下模型:

地址:

代码语言:javascript
复制
class Address extends Model
{
    protected $fillable = [...];

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

联系方式:

代码语言:javascript
复制
class Contact extends Model
{
    protected $fillable = [...];

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

事件:

代码语言:javascript
复制
class Event extends Model
{
    protected $fillable = [...];

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

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

代码语言:javascript
复制
public function contacts()
{
    return $this->morphedByMany('Contact', 'addressable');
}


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

如果可能,我如何实现解决方案?

期望值:

代码语言:javascript
复制
$contactAddress = Address::getAddressable('App\Contact');
$eventAddress = Address::getAddressable('App\Event');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 10:07:47

您可以使用addresses关系:

代码语言:javascript
复制
$contactAddress = Contact::with('addresses')->get()->pluck('addresses')->flatten();

作为单独的方法:

代码语言:javascript
复制
class Address extends Model
{
    public static function getAddressable($class)
    {
        return $class::with('addresses')->get()->pluck('addresses')->flatten();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52019699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档