[英]Joining Entities on query in Doctrine 2
我正在嘗試在Doctrine 2中的一個高級查詢中加入兩個實體。我正在使用Zend Framework 2。
不幸的是,我現在很難找到正在做的事情。
這是我在ZF2中得到的:
KryuuCategorizer
的模塊,我將用它來對網站上的各種內容進行分類。 分類程序有2個實體:
Category
var id
var name
var objects
Object
var id
var entityName
var module
var entityId
var category
Category->objects
由ManyToOne綁定到Object- Object->category
然后我需要手動將實體綁定到Object-> entityId,我想我應該能夠通過在Doctrine 2中使用join來做到這一點。但我不知道從哪里開始或如何抓住它。 我希望有人可以讓我開始並向我展示正確的方向,我查看了Doctrine文檔,但是比我應該更加困惑。
有幾種方法可以達到你想要的效果。
1.在關系定義中添加fetch="EAGER
為此,請在Object
的實體定義中添加fetch="EAGER"
。
/** MANY-TO-ONE, OWNING SIDE
* @var Category
* @ORM\ManyToOne(targetEntity="Application\Entity\Category", inversedBy="objects", fetch="EAGER")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=true)
*/
protected $category;
2.在Object
存儲庫中編寫自定義DQL查詢並執行獲取連接:
/**
* Find object using DQL with a category joined.
*
* @param int $id
* @return Building|null
*/
public function findObject($id)
{
$entityManager = $this->getEntityManager();
$query = $entityManager->createQuery(
"SELECT o, c FROM Object o JOIN o.category c WHERE o.id = :id"
);
$query->setParameter('id', $id);
$query->getOneOrNullResult();
}
這些連接在此處的文檔中進行了解釋。 觀察fetch-join和常規聯接之間的區別。
3.或者在Object
存儲庫中使用Doctrine QueryBuilder
來獲得相同的結果:
/**
* Find object using query builder with a category joined.
*
* @param int $id
* @return Building|null
*/
public function findObject($id)
{
$queryBuilder = $this->createQueryBuilder('o')
->addSelect('c')
->leftJoin('o.category', 'c')
}
return = $queryBuilder->getQuery()->getOneOrNullResult();
}
請注意,如果要獲取連接,還需要將addSelect
條件添加到查詢中,否則它是常規連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.