一对多关系的 Symfony2 createQueryBuilder
Symfony2 createQueryBuilder for One to Many relationship
现在我正在尝试通过将内容 ID 与用户 ID 匹配来编写用于查询 returns 用户名和内容的代码。这是我的 table 样子。
我有两个table。
- 一个是用户 table 包含
username
和 userid
。
- 另一个 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();
现在我正在尝试通过将内容 ID 与用户 ID 匹配来编写用于查询 returns 用户名和内容的代码。这是我的 table 样子。
我有两个table。
- 一个是用户 table 包含
username
和userid
。 - 另一个 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();