Сопоставление матричного типа с сущностями Doctrine

У меня есть небольшая проблема. я моделирую структуру БД, используя объекты Doctrine 2, и я застрял с одним отношением.

То, что мне нужно представить в базе данных, - это матрица, подобная таблице:

| |A|B|C|D|
|A|  x
|B|x   x
|C|  x   x
|D|    x

Таблица показывает, какие предложения доступны с другими предложениями (x=true, empty = false). То, что я пытался сделать, — это отношения «многие ко многим» с доктриной, надеясь, что это сгенерирует таблицу сопоставления, но Doctrine этого не делает. Вот моя сущность:

/** 
 * @ORM\Entity @ORM\HasLifecycleCallbacks 
 * @ORM\Entity(repositoryClass="Core\Repository\Main")
 * @ORM\Table(name="offer_availability") 
 */

class OfferAvailability implements JsonSerializable
{

    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @var String
     * @ORM\Column(type="string")
     */
    protected $name;

    /**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", mappedBy="availableWith", inversedBy="availableWith", fetch="EXTRA_LAZY")
     */
    protected $availableWith; 

Я знаю, что могу создать объект таблицы сопоставления вручную и использовать отношения «один ко многим». Но что мне интересно, есть ли более умный способ приблизиться к этому.


person Auris    schedule 25.11.2015    source источник


Ответы (1)


Неважно, я нашел проблему. Создание сопоставлений в этом случае только сбивает с толку Doctrine. Удаление отображения и инверсии полностью решило проблему:

/**
 * @var \Doctrine\Common\Collections\Collection
 * @ORM\ManyToMany(targetEntity="Core\Entity\Offers\OfferAvailability", fetch="EXTRA_LAZY")
 */
protected $availableWith;

Это сгенерировало таблицу сопоставления:

------------------------------------
|offeravailablity_offeravailability|
------------------------------------
|offeravailability_source          |
|offeravailability_target          |
------------------------------------
person Auris    schedule 25.11.2015