一对多关系的 Symfony2 createQueryBuilder

Symfony2 createQueryBuilder for One to Many relationship

现在我正在尝试通过将内容 ID 与用户 ID 匹配来编写用于查询 returns 用户名和内容的代码。这是我的 table 样子。

我有两个table。

  1. 一个是用户 table 包含 usernameuserid
  2. 另一个 table 是内容 table,它包含内容 ID、content 本身和 userid.

我想编写这样的查询:

SELECT username, content 
FROM user 
JOIN ON content 
WHERE user.userid = content.userid

这样,查询returns用户名和用户创建的内容。但是我不知道如何在 Symfony2 或 DQL 中做到这一点。

第一步 创建实体 用户和内容

例如:

AppBundle/Entity/User.php

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=24, nullable=false)
     */
    private $username;

    /**
     * @ORM\OneToOne(targetEntity="AppBundle\Entity\Content")
     * @ORM\JoinColumn(name="content_id", referencedColumnName="id")
     **/    
    private $content;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * @param string $username
     */
    public function setUsername($username)
    {
        $this->username = $username;
    }

    /**
     * @return \AppBundle\Entity\Content
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * @param string $content
     */
    public function setContent($content)
    {
        $this->content = $content;
    }
}

AppBundle/Entity/Content.php

/**
 * Content
 *
 * @ORM\Table(name="content")
 * @ORM\Entity
 */
class Content
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="text", type="text", nullable=true)
     */
    private $text;

 /**
      * Get id
      *
      * @return integer
      */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getText()
    {
        return $this->text;
    }

    /**
     * @param string $text
     */
    public function setText($text)
    {
        $this->text = $text;
    }
}

第 2 步

在控制器中使用:

$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('\AppBundle\Entity\User')->find($userId);
//content for user
$content = $user->getContent()->getText();