如何连接表doctrine symfony2

时间:2014-01-06 16:13:34

标签: symfony doctrine-orm

我的数据库中有两个表,我想加入这个2表来显示我的视图中的数据,但我找不到解决方案。

这是我在下面给出的第一个实体

/**
 * @ORM\Entity
 */
class classified   
{
     /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $classified_id;

    /**
     * @ORM\Column(type="integer")
    */
    protected $user_id=0;

    /**
     * @ORM\Column(type="string")
    */
    protected $firstname="null";

    /**
     * @ORM\Column(type="integer")
     */
    protected $region_id="null";

第二个实体:

class regions  
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
    */
    protected $region_id;

    /**
     * @ORM\Column(type="string")
    */
    protected $regionname;

    /**
     * @ORM\Column(type="integer")
    */
    protected $country_id=107;
}

在我的控制器中,我想加入该表以获取信息。

$em = $this->getDoctrine()
                   ->getEntityManager();

        $classified = $em->createQueryBuilder()
                    ->select('b')
                    ->from('BlogBundle:classified',  'b')
                    ->addOrderBy('b.classifiedaddeddate', 'DESC')
                    ->getQuery()
                    ->getResult();
        return $this->render('BlogBundle:Page:index.html.twig', array(
            'classified' => $classified
        ));

有任何解决方案吗?

1 个答案:

答案 0 :(得分:6)

写出漂亮的&干净的代码,

在回答之前,我建议您在代码中解决以下问题,

  • 班级名称应为CamelCase&单数(Classified代替classifiedRegion代替regions
  • 尝试找到一种更简洁的方法来设置country_id(因为protected $country_id=107;不会产生感觉。user_id相同

所以,为了让您的分类实体与其相关区域相关,您必须

首先,改变(在Classified班级中)

/**
 * @ORM\Column(type="integer")
 */
protected $region_id="null";

/**
 * @ORM\ManyToOne(targetEntity="Region", inversedBy="classifieds")
 * @ORM\JoinColumn(name="region_id", referencedColumnName="region_id")
 */
protected $region;

并添加到您的Region实体

/**
 * @ORM\OneToMany(targetEntity="Classified", mappedBy="region")
 */
protected $classifieds;

深入了解文档Entity Relationships/Associations章节的Databases and Doctrine部分,了解如何使用Doctrine定义实体关联。