我已经创建了表:addresses
,contacts
,events
和addressables
。
这里addressables (id, address_id, addressable_id, addressable_type)
与contacts
和events
的地址具有多对多态关系。
我定义了以下模型:
地址:
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');
答案 0 :(得分:1)
您可以使用C:\Users\myName
关系:
addresses
作为单独的方法:
$contactAddress = Contact::with('addresses')->get()->pluck('addresses')->flatten();