首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在laravel中查询多到多多态关系

在laravel中查询多到多多态关系
EN

Stack Overflow用户
提问于 2018-09-01 06:15:32
回答 1查看 597关注 0票数 0

我有以下表格:

  • contacts(id, name, email, phone_no)
  • events(id, title, start_date, end_date)
  • addresses(id, city, state, country, zip_code)
  • addressables(id, address_id, addressable_id, addressable_type)

这里,addressables对于contacts events有许多到多个多态关系。addressables还可以容纳其他多态模型类。

地址模型

代码语言:javascript
复制
public function addressable()
{
    return $this->morphTo();
}

事件/接触模型

代码语言:javascript
复制
public function addresses()
{
    return $this->morphToMany(Address::class, 'addressable');
}

我想获取地址和他们的相关模型。如果有人能帮我

  • 具有关联模型的列表地址
  • 特定模型类型的列表地址
  • 按模型类型分组的列表地址

更新

预期成果:

地址

代码语言:javascript
复制
id   |    address   
1    |    New York, USA
2    |    California, USA
3    |    Nevada, USA

联系人

代码语言:javascript
复制
id   |    name   
1    |    Albert King
2    |    Michelle Johnson
3    |    Sujit Baniya

events

代码语言:javascript
复制
id   |    title   
1    |    Event 1
2    |    Event 2
3    |    Event 3

addressables

代码语言:javascript
复制
id   |    address_id    |    addressable_id    | addressable_type   
1    |    1             |    1                 | Contact
2    |    2             |    1                 | Event
3    |    3             |    2                 | Contact

Address::with('addressables')的例外结果

代码语言:javascript
复制
Address - ID 1
----Details (New York, USA)
----Contact (Albert King)
Address - ID 2
----Details (California, USA)
----Event (Event 1)
Address - ID 3
----Details (Nevada, USA)
----Contact (Michelle Johnson)

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2018-09-01 06:47:08

根据多到多多态关系的拉勒维尔文献,您必须编辑您的地址模型,并为eventscontacts添加如下方法:

代码语言:javascript
复制
//Get all the contacts that are assigned this address
public function contacts()
{
    return $this->morphedByMany('App\Contact', 'addressable');
}

//Get all the events that are assigned this address
public function events()
{
    return $this->morphedByMany('App\Event', 'addressable');
}

回答您的问题

然后,要获取联系人的所有地址,可以使用addresses动态属性,如下所示:

代码语言:javascript
复制
$contact = App\Contact::find(1);

foreach ($contact->addresses as $address) {
    //
}

和事件:

代码语言:javascript
复制
$event = App\Events::find(1);

foreach ($event->addresses as $address) {
    //
}

--最后是,您可以检索地址事件,联系人如下:

代码语言:javascript
复制
$address = App\Address::find(1);

foreach ($address->events as $event) {
    //
}

foreach ($address->contacts as $contact) {
    //
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52125422

复制
相关文章

相似问题

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