[英]Symfony2/Doctrine2 innerJoin using QueryBuilder
我正在嘗試使用Doctrine2/QueryBuilder
構建一個innerJoin
查詢。
$repo = $this->getDoctrine()
->getRepository('MyBundle:Models');
$query = $repo->createQueryBuilder('m')
->where('m.id = :id')
->setParameter('id', $id);
教義說:
連接始終屬於 from 子句的一部分。 這就是為什么您必須將連接所屬的 FROM 部分的別名指定為第一個參數的原因。
作為第二個和第三個參數,您可以指定連接表的名稱和別名,第四個參數包含 ON 子句。
前任。
$queryBuilder
->innerJoin('u', 'phonenumbers', 'p', 'u.id = p.user_id');
我無法理解的是'phonenumbers'
表引用了Entity Name
或DB Table Name
。
我真正想要的是,有什么方法可以明確地引用像
innerJoin('u', 'MyBundle:phonenumbers', 'p', 'u.id = p.user_id')
?
當它就這樣加入時有點混亂。 請有人向我解釋一下嗎?
幫助!!
事實上,您已經在 innerJoin 函數的第二個參數中明確引用了您的實體電話號碼。
您閱讀了文檔,我將根據您的要求逐條重新閱讀:
m
(您的模型的別名)但是對於 symfony 並且如果您的兩個實體之間存在這樣的關系:
//AppBundle/Entity/Models
class Models {
/**
* ...
**/
private $id;
/**
* ...
* @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Phone", inversedBy="models")
**/
private $phonenumbers;
...
}
你想加入你可以這樣做:
$repo = $this->getDoctrine()
->getRepository('MyBundle:Models');
$query = $repo->createQueryBuilder('m')
->innerJoin('m.phonenumbers', 'p')
->where('m.id = :id')
->setParameter('id', $id);
解釋一下:您只需將要加入的實體屬性作為第一個參數傳遞(這里是模型的電話號碼)並將其定義為別名(p 代表電話號碼以在選擇中訪問它)
您正在使用表在 DQL 級別上工作,這意味着您實際上連接了一個表,因此您只需要表名,而不是實體名。 表“phonenumbers 甚至可能沒有實體開始,這就是為什么 Doctrine 請求表名而不是實體名。
編輯
實際上可以使用實體名稱以及以下內容(取自我自己的代碼,它作為一種魅力):
$builder = $this->createQueryBuilder('m');
$builder->innerJoin(
'YourBundle:Category',
'c',
Join::WITH,
$builder->expr()->eq('m.id', 'c.mdl_id')
);
要使用 Join 中的常量,您應該首先:
use Doctrine\ORM\Query\Expr\Join;
但這也應該有效(取自文檔,這意味着應該像魅力一樣工作):
$queryBuilder
->select('id', 'name')
->from('users', 'u')
->innerJoin('u', 'phonenumbers', 'p', 'u.id = p.user_id');
這是采取的形式: http : //doctrine-orm.readthedocs.org/projects/doctrine-dbal/en/latest/reference/query-builder.html#join-clauses
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.