2017-09-13 37 views
0
id name referred_by_id 
1 test1 2 
2 test2 1 
3 test3 1 

我想添加一個新的列查詢出put referencedByName基於referencedByID。這等於id。Symfony加入相同的表格,以獲得值作爲別名從表

SELECT t1.*, t2.name AS refname 
FROM tbl_students t1 
JOIN tbl_students t2 
    ON t1.referred_by_id = t2.id 
ORDER BY t1.id 

我想這樣做JOIN(同桌)在Symsofny我查詢

$repo = $this->getDoctrine()->getRepository('C2EducateToolsBundle:Students'); 
      $leadsData['leads'] = $repo->createQueryBuilder('t') 
          ->select('t.id', 't.name','t.referredByID','t.referredBy') 
          ->where('t.id = :stuID') 
          ->setParameter('stuID', $leadId) 
          ->getQuery()->getResult(); 

我一定要改變實體的任何associaltion?

我改變了我的實體

/** 
      * @var integer $referredByID 
      * 
      * @ORM\Column(name="referred_by_id", type="integer", nullable=true) 
      * @Type("integer") 
      */ 
      protected $referredByID; 

/** 
    * @var referredByID 
    * 
    * @ORM\ManyToOne(targetEntity="Students", cascade={"persist", "remove", "merge"}) 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="referred_by_id", referencedColumnName="id") 
    * }) 
    * @Type("C2Educate\ToolsBundle\Entity\Students") 
    */ 
    protected $referredByID; 
+0

是的,你有你的學生實體自我參照實體定義referredBy財產(多對一和一對多)。所以,當你得到Student對象也會有學生類型 –

+0

的referredBy對象我這樣做,我在我的問題更新相同。我如何在我的教條查詢中獲得該字段? – Developer

回答

1

如果您在主實體中有關聯映射,那麼您無需在查詢構建器中提及,因爲當您獲取該教義對象時,它將具有其關聯對象的數據,如查詢更新選擇方法到->select('t')

如果查詢返回對提供學生證的學生對象,然後學生對象,你可以調用它的關聯對象的getter方法作爲

$student->getReferredByID()->getName() 

上面的語句將返回相關的學生誰被標記爲名稱爲此對象引用。

此外,如果您是通過主鍵搜索,你可以只使用在存儲庫,而不是使用查詢生成器find()方法。

雖然你可以給查詢生成器的別名也

+0

謝謝,我的協會映射是否正確。 ? – Developer

+0

是的,它對我來說看起來很好,但名稱約定不是按照標準進行的,就像定義任何關聯時一樣,您定義的關係名稱像'$ referencedBy'而不是'$ referencedByID' –

0

您在實體定義的關聯後,您的查詢應該是這樣的:

$repo->createQueryBuilder('t') 
     ->select('t.id', 't.name','t.referredByID', 'p.name as parent_name') 
     ->join('t.referredByID', 'p') // joining self entity with parent id ref. 
     ->where('t.id = :stuID') 
     ->setParameter('stuID', $leadId) 
     ->getQuery()->getResult(); 

這應該讓你parent_name密鑰下的相關父母名稱。

但是,由於查詢似乎是一個單一的項目。爲什麼不簡單地加載實體並使用getter ref來加載父實體和名稱?

+0

我收到此錯誤。 '[語義錯誤]第0行,第496行'nearByID'附近,錯誤:無效PathExpression。必須是StateFieldPathExpression.' – Developer

+0

只需檢查屬性名稱即可。休息應該是一樣的。 – Jeet