使用连接表的原则返回不起作用的结果Symfony2

时间:2016-02-18 13:01:38

标签: php mysql symfony doctrine-orm dql

我在使用连接表值通过Doctrine获取结果时遇到了困难。我目前正在为客户编写CRM,它实现了包含任务和用户的项目。

我的结构如下:

用户表 - 包含所有用户。 tasks表 - 包含项目中的任务列表 user_task表 - 指示哪些用户可以执行哪些任务的连接表。

我在我的实体中创建了一个连接表,如下所示:

 /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Task", inversedBy="user")
     * @ORM\JoinTable(name="user_task",
     *   joinColumns={
     *     @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="task_id", referencedColumnName="id")
     *   }
     * )
     */
    protected $task;

在我的任务实体中:

/**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="task")
     * @ORM\JoinTable(name="user_task")
     */
    private $user;

我的问题是,在CRM的前端,管理员将从下拉列表中更改任务,然后轮询数据库以获取能够执行该任务的用户列表。但是因为user_stage表本身不是一个实体,所以我不知道如何将它合并到我的doctrine queryBuilder中。

我尝试使用本机查询,其中$ taskId从Controller传入:

$qb = $this->createNativeQuery('SELECT user.name FROM user JOIN user_task ON user_task.user_id = user.id WHERE user_task.task_id = '.$taskId);
$result = $qb->getResult();

但我得到以下错误:

  

未定义的方法'createNativeQuery'。方法名称必须以   findBy或findOneBy!

我很少使用Native Queries,所以我不确定我在这里做错了什么。有没有办法能够在不使用NativeQuery的情况下执行我需要的查询,并且只是以某种方式通过从User和Task实体引用它来访问连接表?

谢谢 迈克尔

1 个答案:

答案 0 :(得分:0)

不要在$ this下使用createNativeQuery,你有Repository对象。

在存储库类中创建方法并在那里调用它。