我打算構建多語言網站。所以,我有DB表列:在Doctrine中爲findBy定製SELECT
- ID
- text_en
- text_pl
當從數據庫中獲取數據,我想只有id
和text
領域。通常情況下,我會發出:
SELECT id, text_$locale AS text FROM page ...
如何做到這一點的原則,這樣我就有這樣的選擇完成自動當我使用findBy()
或findOneBy()
?查詢生成器是我唯一的選擇嗎?
我打算構建多語言網站。所以,我有DB表列:在Doctrine中爲findBy定製SELECT
當從數據庫中獲取數據,我想只有id
和text
領域。通常情況下,我會發出:
SELECT id, text_$locale AS text FROM page ...
如何做到這一點的原則,這樣我就有這樣的選擇完成自動當我使用findBy()
或findOneBy()
?查詢生成器是我唯一的選擇嗎?
創建查詢是語義選項;您應該將其作爲存儲庫中的自定義方法放入。
我在這裏發佈一個示例,以便稍後可以使用它作爲參考。
簡單的例子:
<?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;
}
}
正確,如果要選擇特定列,則必須使用查詢建立器或本機查詢。
使用findBy
指定單個列是不可能的。您可以將關聯延遲加載到其他表中的實體,但至少findBy
將返回實體表中的所有列。