Symfony2 createQueryBuilder for One to Many关系

时间:2015-12-09 20:45:58

标签: php mysql symfony dql

现在我正在尝试编写查询代码,通过将内容ID与用户ID匹配来返回用户名和内容。这是我的表格。

我有两张桌子。

  1. 一个用户表包含usernameuserid
  2. 另一个表是内容表,其中包含内容ID,content本身和userid
  3. 我想写一个像这样的查询:

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

    通过这种方式,查询返回用户所做内容的用户名。但我不知道如何在Symfony2或DQL中执行此操作。

1 个答案:

答案 0 :(得分:2)

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

例如:

的appbundle /实体/ 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 /实体/ 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();