修改
我们采用以下模型:
使用命令doctrine:mapping:import:
生成以下实体class Toto
{
/**
* @var integer $idtoto
*
* @ORM\Column(name="idtoto", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idtoto;
/**
* Get idtoto
*
* @return integer
*/
public function getIdtoto()
{
return $this->idtoto;
}
}
class Tata
{
/**
* @var integer $idtata
*
* @ORM\Column(name="idtata", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idtata;
/**
* @var Toto
*
* @ORM\ManyToOne(targetEntity="Toto")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="idtoto", referencedColumnName="idtoto")
* })
*/
private $idtoto;
/**
* Get idtata
*
* @return integer
*/
public function getIdtata()
{
return $this->idtata;
}
/**
* Set idtoto
*
* @param Creatis\SaisieBundle\Entity\Toto $idtoto
*/
public function setIdtoto(\Creatis\SaisieBundle\Entity\Toto $idtoto)
{
$this->idtoto = $idtoto;
}
/**
* Get idtoto
*
* @return Creatis\SaisieBundle\Entity\Toto
*/
public function getIdtoto()
{
return $this->idtoto;
}
}
为什么Toto类中的OneToMany关系没有生成(必须手工输入):
/**
* @ORM\OneToMany(targetEntity="Tata", mappedBy="idToto")
*/
private $tatas;
是否可以选择放入命令行?
答案 0 :(得分:1)
在leftJoin中,您只需使用Tata类中定义的关系属性的名称。第二个参数仅定义您可以在语句中使用的键。如果你们的关系是正确的,那么教义会自动加入:
class TataRepository extends EntityRepository{
public function getRelation(){
$qb = $this->createQueryBuilder('tata')
->leftJoin('tata.idtoto', 'toto');
return $qb->getQuery()->getResult();
}
}
如果您不想使用外键加入其他字段,则必须在leftJoin中添加一个thrid参数来执行匹配,例如toto.field1 = tata.field2
。
答案 1 :(得分:0)
这是Doctrine 2的限制。它只解决了大约70-80%的必要映射信息。请查看此http://doctrine-orm.readthedocs.org/en/2.0.x/reference/tools.html#convert-mapping-information