我已经创建了表: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');发布于 2018-08-26 10:07:47
您可以使用addresses关系:
$contactAddress = Contact::with('addresses')->get()->pluck('addresses')->flatten();作为单独的方法:
class Address extends Model
{
public static function getAddressable($class)
{
return $class::with('addresses')->get()->pluck('addresses')->flatten();
}
}https://stackoverflow.com/questions/52019699
复制相似问题