使用连接表返回结果的学说不起作用 Symfony2
Posted
技术标签:
【中文标题】使用连接表返回结果的学说不起作用 Symfony2【英文标题】:Doctrine using join table to return results not working Symfony2 【发布时间】:2016-02-18 13:01:38 【问题描述】:我在使用联接表值通过 Doctrine 获取结果时遇到了困难。我目前正在为客户编写 CRM,它使用任务和用户来实施项目。
我的结构如下:
用户表 - 包含所有用户。 任务表 - 包含项目中的任务列表 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 表本身并不是一个实体,所以我不知道如何将它合并到我的学说 queryBuilder 中。
我尝试使用原生查询,其中 $taskId 是从控制器传入的:
$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!
我很少使用本机查询,所以我不确定我在这里做错了什么。有没有什么方法可以在不使用 NativeQuery 的情况下执行我需要的查询,并且只是通过从 User 和 Task 实体中引用连接表来访问连接表?
谢谢 迈克尔
【问题讨论】:
【参考方案1】:不要在 $this 下有 Repository 对象的地方使用 createNativeQuery。
在存储库类中创建方法并在那里调用它。
【讨论】:
或者做 $this->getEntityManager()->createNativeQuery(); 抱歉 - createNativeQuery 调用在我的存储库中名为 findByStageId() 的方法中。我的原始查询是$qb = $this->createQueryBuilder('u') ->from('user_stage','us') ->select('u','us') ->where('us.stage_id = :stageId') ->setParameter('stageId', $stageId);
,但它说 user_stage 不存在。
好的,使用 getEntityManager() ->createNativeQuery() 使用结果集映射方法有效 - 但是它返回一个空白结果,即使当我直接在我的数据库上运行相同的查询时它确实返回结果……以上是关于使用连接表返回结果的学说不起作用 Symfony2的主要内容,如果未能解决你的问题,请参考以下文章