[英]Querying Many to Many polymorphic relationship in laravel
我有以下表格:
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
还可以容纳其他多态模型类。
地址模型
public function addressable()
{
return $this->morphTo();
}
事件/联系方式
public function addresses()
{
return $this->morphToMany(Address::class, 'addressable');
}
我想获取地址及其关联的模型。 如果有人可以帮助我,我将不胜感激
更新
预期成果:
地址
id | address
1 | New York, USA
2 | California, USA
3 | Nevada, USA
往来
id | name
1 | Albert King
2 | Michelle Johnson
3 | Sujit Baniya
事件
id | title
1 | Event 1
2 | Event 2
3 | Event 3
addressables
id | address_id | addressable_id | addressable_type
1 | 1 | 1 | Contact
2 | 2 | 1 | Event
3 | 3 | 2 | Contact
Address :: with('addressables')的例外结果
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)
先感谢您!
根据Laravel的有关许多多态关系的文档 ,您必须编辑地址模型并添加events
和contacts
如下所示:
//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
动态属性,如下所示:
$contact = App\Contact::find(1);
foreach ($contact->addresses as $address) {
//
}
对于事件:
$event = App\Events::find(1);
foreach ($event->addresses as $address) {
//
}
最后 ,您可以检索地址事件和联系人,如下所示:
$address = App\Address::find(1);
foreach ($address->events as $event) {
//
}
foreach ($address->contacts as $contact) {
//
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.