У меня есть отношения ManyToMany между таблицами Pais
и FabricanteDistribuidor
определены следующим образом:
Pais.php
class Pais
{
// column definitions
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\FabricanteDistribuidor", inversedBy="paises", cascade={"persist"})
* @ORM\JoinTable(name="negocio.fabricante_distribuidor_pais", schema="negocio",
* joinColumns={@ORM\JoinColumn(name="fabricante_distribuidor_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="pais_id", referencedColumnName="id")}
* )
*/
protected $fabricanteDistribuidor;
/**
* Add fabricanteDistribuidor
*
* @param AppBundle\Entity\FabricanteDistribuidor $fabricanteDistribuidor
*/
public function addfabricanteDistribuidor(\AppBundle\Entity\FabricanteDistribuidor $fabricanteDistribuidor)
{
$this->fabricanteDistribuidor[] = $fabricanteDistribuidor;
}
/**
* Get fabricanteDistribuidor
*
* @return Doctrine\Common\Collections\Collection
*/
public function getfabricanteDistribuidor()
{
return $this->fabricanteDistribuidor;
}
}
FabricanteDistribuidor.php
class FabricanteDistribuidor
{
// column definitions
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Pais", mappedBy="fabricanteDistribuidor", cascade={"persist"})
*/
protected $paises;
public function __construct()
{
$this->paises = new ArrayCollection();
}
/**
* Set paises
*
* @param AppBundle\Entity\Pais $pais
* @return FabricanteDistribuidor
*/
public function addPaises(\AppBundle\Entity\Pais $pais)
{
$this->paises[] = $pais;
return $this;
}
/**
* Get paises
*
* @return Doctrine\Common\Collections\Collection
*/
public function getPaises()
{
return $this->paises;
}
}
Это приведет к созданию таблицы fabricante_distribuidor_pais
в схеме negocio
с fabricante_distribuidor_id
и pais_id
FK, указывающей на PK в связанных таблицах, что прекрасно.
Что касается этого сценария:
1- Можно определить fabricante_distribuidor_id
и pais_id
как PK на таблице fabricante_distribuidor_pais
? Я имею в виду добавление дополнительной аннотации или мне нужно создать внешний объект и установить их как @ORM\Id
в определении столбца?
2- Являются ли методы addXXX
и getXXX
правильными в моих сущностях? Я имею в виду: я должен добавить один или несколько paises
(от лица Pais) к FabricanteDistribuidor
легко, и я не забочусь об обратном отношении, то есть я не буду добавлять FabricanteDistribuidor
из Pais
, они правы или мне нужно изменить что нибудь?
1- Если один id является первичным ключом, отношение не становится много для одного/одного для многих? Даже 1to1, если оба PK
2- Если вы не заботитесь об обратном, вы собираетесь добавлять геттеры и сеттеры только в одном объекте да. Вы все равно можете изменить его на biredictionnal позже с атрибутом "mappedBy"
Проверьте, существует ли сущность:
Вы можете сделать это в своем контроллере:
например, в платах
$data = $em->getRepository('AcmeBundle:Pais')->findOneByFabricanteDistribuidor($id);
if($data)
{
// the entity is allready persisted
}
else
{
// no, we can persist the entity
}
fabricante_distribuidor_pais
для предотвращения, то возникает ошибка non-duplicates, если я пытаюсь вставить то же самое, какой-нибудь совет по этому поводу?