2016-02-07 15 views
1

我打算構建多語言網站。所以,我有DB表列:在Doctrine中爲findBy定製SELECT

  • ID
  • text_en
  • text_pl

當從數據庫中獲取數據,我想只有idtext領域。通常情況下,我會發出:

SELECT id, text_$locale AS text FROM page ... 

如何做到這一點的原則,這樣我就有這樣的選擇完成自動當我使用findBy()findOneBy()?查詢生成器是我唯一的選擇嗎?

回答

1

創建查詢是語義選項;您應該將其作爲存儲庫中的自定義方法放入。

我在這裏發佈一個示例,以便稍後可以使用它作爲參考。

簡單的例子:

<?php 

namespace Acme\AppBundle\Entity; 
use Doctrine\ORM\EntityRepository; 

/** 
* PageRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class PageRepository extends EntityRepository 
{ 

    /** 
    * Gets and id and page name based by ID 
    * @return array 
    */ 
    public function findNameById($id) 
    { 
     $query = $this->getEntityManager() 
         ->createQuery("SELECT p.id, p.name 
            FROM Acme\AppBundle\Entity\Page p 
            WHERE p.id = :pageId"); 
     $query->setParameter('pageId', $id); 
     $result = $query->getOneOrNullResult(); 
     return $result; 
    } 
} 
0

正確,如果要選擇特定列,則必須使用查詢建立器或本機查詢。

使用findBy指定單個列是不可能的。您可以將關聯延遲加載到其他表中的實體,但至少findBy將返回實體表中的所有列。

相關問題