学说中的多态关系2

时间:2014-03-18 19:19:24

标签: symfony doctrine-orm

有没有办法实现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,我将非常感激。

1 个答案:

答案 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

相关问题