Symfony2 ORM OneToOne关系,加入

时间:2013-11-14 08:32:40

标签: symfony join

我有实体:

class RegionalPartner
{
    /**
     * @var integer
     *
     * @ORM\Column(name="direction_id", type="integer")
     * @ORM\OneToOne(targetEntity="Direction")
     * @ORM\JoinColumn(name="direction_id", referencedColumnName="id")
     */
    private $directionId;

...

和关系的目标:

class Direction
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
.....

我有一个存储库:

    class RegionalPartnerRepository extends EntityRepository
{
    public function findAllWithNames()
    {
        $query = $this->getEntityManager()
            ->createQuery('
                SELECT 
                    r
                FROM 
                    AstRegionalPartnerBundle:RegionalPartner r 
                JOIN 
                    r.directionId d
                ');
            //->setParameters($params);

        return $query->getResult();

有一个错误:

[Semantical Error] line 0, col 108 near 'd': Error: Class Ast\RegionalPartnerBundle\Entity\RegionalPartner has no association named directionId

如何制作正确的关系代码(需要将“方向”的名称命名为“RegionalPartner”实体)?

ORM中的联接文档在哪里?

2 个答案:

答案 0 :(得分:0)

使用QueryBuilder并设置正确的选择

$this->createQueryBuilder('r')
     ->select('d.name')
     ->innerJoin('r.directionId', 'd')

尽量为你的名字命名。所以directionId - >方向

答案 1 :(得分:0)

class RegionalPartner
{
    /**
     * @var integer
     *
     * @ORM\OneToOne(targetEntity="Direction")
     * @ORM\JoinColumn(name="direction_id", referencedColumnName="id")
     */
    private $directionId;

...

删除了注释的一部分:

* @ORM\Column(name="direction_id", type="integer")