左派加入学说2

时间:2017-10-10 10:19:04

标签: php doctrine-orm

我需要从2个表中获取数据。实际上只需要在表格键的基础上将第二表中的一个字段包含到第一表的结果中。

我做了研究并找到了解决方法。

$qb->select(array('a', 'c'))
   ->from('Sdz\BlogBundle\Entity\Article', 'a')
   ->leftJoin('a.comments', 'c');

当我实现它时,它显示错误 错误:类没有名为comments的关联,这是显而易见的,因为注释不是Article表(实体)的字段。我很困惑如何定义第二个表从哪个字段需要提取,因为a.comments是Article表的关联。

1 个答案:

答案 0 :(得分:2)

要使用Doctrine加入,您必须告诉Doctrine您的实体之间的关系。这是使用http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

中可以找到的关系注释(@OneToOne, @OneToMany, @ManyToOne, @ManyToMany)完成的

您无法在Doctrine中使用没有关联的联接。

根据您的问题,我认为您的文章实体与评论有OneToMany的关系。然后,您的实体定义应类似于:

/**
 * @Entity
 */
class Article{
     //.... all your current fields
     /**
      * @ORM\OneToMany(targetEntity="Comment", mappedBy="article")
      */
     private $comments;
     //.... setters and getters
} 

/**
 * @Entity
 */
class Comment{
     //.... all your current fields
     /**
      * @ORM\ManyToOne(targetEntity="Article", inversedBy="comments")
      */
     private $article;
     //.... setters and getters
} 

使用这些实体,您将能够执行查询。