php - 一对多关系的 Symfony2 createQueryBuilder

标签 php mysql symfony dql

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

我有两个表。

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

我想写这样的查询:

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

这样,查询返回用户名和用户创建的内容。但我不知道如何在 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 步

在 Controller 中使用:

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

关于php - 一对多关系的 Symfony2 createQueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188633/

相关文章:

mysql - Doctrine - 获取下一条和上一条记录

javascript - 选择 onblur 触发 ajax 但不更新数据库

PHP 函数存在哈希等于重新声明

php - 多个 select2 在表单提交时仅返回一个选择

mysql - 错误代码 MySQL 工作台 : 1215 Cannot add foreign key constraint

Symfony2 Assets 问题

php - 按方向排序无效

php - 无法更新 Docker 容器中的 php.ini 文件

php - 在 mysql 数据库中存储 HTML 的最佳实践

带有 BETWEEN 的 MySQL 列 AS 导致错误