有没有办法实现Laravel对学说的多态关系?
以下是一个例子:
class Address
{
protected $street;
...
public function setStreet()
{
}
public function getStreet()
{
}
}
class Event
{
/*one to many*/
protected $addresses;
...
}
class Museum
{
/*one to many*/
protected $addresses;
...
}
在数据库上它会是这样的:
Address:
id | type (event or museum) | type_id | street ...
Event:
id | name ...
Museum:
id | name ...
我查看单表继承,它似乎解决了我的问题,但我不明白如何将事件或博物馆与地址相关联。如果有人能够ELI5,我将非常感激。
答案 0 :(得分:6)
它看起来像继承映射的用例,除非您有大量不同的实体要存储地址。使用Doctrine中的示例,您将为每个地址创建两个类。
<?php
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"event" = "EventAddress", "museum" = "MuseumAddress"})
*/
class Address {
protected $street;
// ...
}
/**
* @Entity
*/
class EventAddress extends Address {
protected $event;
// ...
}
/**
* @Entity
*/
class MuseumAddress extends Address {
protected $museum;
// ...
}
详细了解inheritance mapping。