2016-02-18 51 views
1

我使用的連接表的值通過主義去取結果有困難。我目前正在爲一個客戶端編寫一個客戶關係管理系統,該系統用任務和用戶實施項目學說使用連接表中返回結果不工作的Symfony2

我的結構如下:

用戶表 - 包含所有用戶。 任務表 - 包含任務的一個項目 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的前端時, admin會從下拉列表中更改任務,然後輪詢數據庫以獲取能夠執行該任務的用戶列表。但是因爲user_stage表本身並不是一個實體,所以我不知道如何將它合併到我的教條queryBuilder中。

我使用本機查詢,其中$任務id在從控制器傳遞嘗試:

$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(); 

但我只是得到以下錯誤:

Undefined method 'createNativeQuery'. The method name must start with either findBy or findOneBy!

我很少使用原生查詢,所以我我不知道我在這裏做錯了什麼。有沒有什麼辦法可以在不使用NativeQuery的情況下執行我需要的查詢,並且通過引用來自用戶和任務實體的某種方式訪問​​連接表?

謝謝 邁克爾

回答

0

不要使用createNativeQuery凡根據$該你有Repository對象。

創建庫類的方法,並調用它。

+0

或做$這個 - > getEntityManager() - > createNativeQuery(); – Cerad

+0

對不起 - createNativeQuery調用在我的repo中稱爲findByStageId()的方法中。我原來的查詢是'$ QB = $這個 - > createQueryBuilder( 'U') - >從( 'user_stage', '我們') - >選擇( 'U', '我們') - >在哪裏(」 us.stage_id =:stageId') - > setParameter('stageId',$ stageId);'但它表示user_stage不存在。 –

+0

好吧,使用getEntityManager() - > createNativeQuery()使用結果集映射方法工作 - 但它返回空白結果,即使當我直接對我的數據庫運行相同的查詢時,它也會返回結果.... –