Symfony 2 — получить дополнительные поля в отношениях «многие ко многим»

У меня есть отношение «многие ко многим» в Symfony 2. Диаграмма ниже.

https://i.stack.imgur.com/x6AYs.png

Из Tema Entity я могу получить все записи Topico, связанные с использованием этого определения ORM.

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="Application\RiesgoBundle\Entity\Topico", inversedBy="tema")
 * @ORM\JoinTable(name="tema_topico",
 *   joinColumns={
 *     @ORM\JoinColumn(name="tema", referencedColumnName="id")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="topico", referencedColumnName="id")
 *   }
 * )
 */
private $topico;

И используя этот метод

/**
 * Get topico
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getTopico()
{
    return $this->topico;
}

Однако я не знаю, как получить доступ к значениям "impacto" и "ocurrencia", хранящимся в таблице tema_topico. Есть ли способ сделать это с помощью Entity Manager?


person gizmo_marco    schedule 22.07.2014    source источник


Ответы (1)


В ассоциации ManyToMany вы не можете хранить дополнительные поля. Чтобы получить "ManyToMany" с дополнительными полями, вам нужно будет сделать OneToMany - ManyToOne. Это даст вам что-то вроде.

class Tema {
    /*
     * @ORM\OneToMany(targetEntity="temaTopico", mappedBy="tema")
     */
    private $temaTopico;
}

class Topico {
    /*
     * @ORM\OneToMany(targetEntity="temaTopico", mappedBy="topico")
     */
    private $temaTopico;
}

class TemaTopico {
    /*
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Tema", inversedBy="temaTopico")
     */
    private $tema;

    /*
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Topico", inversedBy="temaTopico")
     */
    private $topico;

    /*
     * @ORM\Column(name="impacto", type="string")
     */
    private $impacto;
}

см. это и это

person AlixB    schedule 22.07.2014