我在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;
}
}
这将在模式negocio
上生成一个表fabricante_distribuidor_pais
,其中fabricante_distribuidor_id
和pais_id
FK指向相关表上的PK,这很好。
关于这种情况:
1-是否可以在fabricante_distribuidor_pais
表上将fabricante_distribuidor_id
和pais_id
定义为PK?我的意思是添加一些额外的注释,或者我需要创建一个外部实体,并在列定义上将它们设置为@ORM'Id
?
2-addXXX
和getXXX
方法在我的实体中正确吗?我的意思是:我应该很容易地将一个或多个paises
(来自Pais实体)添加到FabricanteDistribuidor
中,我不在乎逆关系,这意味着我不会从Pais
添加FabricanteDistribuidor
,它们是对的吗?还是我需要更改一些东西?
1-如果一个id是主键,那么关系不是变成多对一/一对多吗?甚至1to1如果两者都是PK
2-如果你不关心相反的情况,你将只在一个实体中添加getter和setter。稍后,您仍然可以使用属性"mappedBy"将其更改为双预测纳尔
检查实体是否存在:
你可以在你的控制器中做到这一点:
例如Pays
$data = $em->getRepository('AcmeBundle:Pais')->findOneByFabricanteDistribuidor($id);
if($data)
{
// the entity is allready persisted
}
else
{
// no, we can persist the entity
}