我在使用连接表值通过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实体引用它来访问连接表?
谢谢 迈克尔
答案 0 :(得分:0)
不要在$ this下使用createNativeQuery,你有Repository对象。
在存储库类中创建方法并在那里调用它。