我有以下表格:
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 Baniyaevents
id | title
1 | Event 1
2 | Event 2
3 | Event 3addressables
id | address_id | addressable_id | addressable_type
1 | 1 | 1 | Contact
2 | 2 | 1 | Event
3 | 3 | 2 | ContactAddress::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)提前谢谢你!
发布于 2018-09-01 06:47:08
根据多到多多态关系的拉勒维尔文献,您必须编辑您的地址模型,并为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) {
//
}https://stackoverflow.com/questions/52125422
复制相似问题