gpt4 book ai didi

php - 使用 QueryBuilder 的 Symfony2/Doctrine2 innerJoin

转载 作者:行者123 更新时间:2023-11-29 02:19:51 24 4
gpt4 key购买 nike

我正在尝试使用 Doctrine2/QueryBuilder 构建一个 innerJoin 查询。

$repo =  $this->getDoctrine()
->getRepository('MyBundle:Models');
$query = $repo->createQueryBuilder('m')
->where('m.id = :id')
->setParameter('id', $id);

学说说:

A join always belongs to one part of the from clause. This is why you have to specify the alias of the FROM part the join belongs to as the first argument.

As a second and third argument you can then specify the name and alias of the join-table and the fourth argument contains the ON clause.

例如

$queryBuilder
->innerJoin('u', 'phonenumbers', 'p', 'u.id = p.user_id');

我无法理解的是 'phonenumbers' 表引用了 Entity NameDB Table Name

我真正想要的是,有什么方法可以显式引用实体

innerJoin('u', 'MyBundle:phonenumbers', 'p', 'u.id = p.user_id')?

就这样加入的时候有点乱。有人可以给我解释一下吗?

求助!!

最佳答案

您正在处理表的 DQL 级别,这意味着您实际连接了一个表,因此您只需要表名,而不是实体名。表“phonenumbers 甚至可能没有实体开头,这就是 Doctrine 要求表名而不是实体名的原因。

编辑

实际上可以像下面这样使用实体名称(取 self 自己的代码,它很有魅力):

$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

关于php - 使用 QueryBuilder 的 Symfony2/Doctrine2 innerJoin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com