我在Pais
和FabricanteDistribuidor
表之间建立了一个ManyToMany关系,定义如下:
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
和fabricante_distribuidor_pais
定义为PK吗?我的意思是添加一些额外的注释,或者我需要创建一个外部实体并在列定义上将它们设置为@ORM\Id
?
2-我的实体中的addXXX
和getXXX
方法是否合适?我的意思是:我应该轻松地将一个或多个paises
(来自Pais实体)添加到FabricanteDistribuidor
,我不关心反向关系意味着我不会添加FabricanteDistribuidor
一个Pais
,他们是正确的还是我需要改变一些东西?
答案 0 :(得分:1)
1-如果一个id是主键,那么关系会变成多对一/一对多?如果两者都是PK,即使是1to1 2-如果你不关心逆,你只会在一个实体中添加getter和setter yes。您仍然可以使用属性“mappedBy”
将其更改为biredictionnal检查实体是否存在:
您可以在控制器中执行此操作:
例如在Pays
中$data = $em->getRepository('AcmeBundle:Pais')->findOneByFabricanteDistribuidor($id);
if($data)
{
// the entity is allready persisted
}
else
{
// no, we can persist the entity
}