- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何让它工作。
我有:
partner
表,包含字段 id
和 name
partner_address
表:id_partner
和 id_address
address
,包含字段 id
和引用 town(id)
的外部键 id_town
town
,包含字段 id
、name
和 postal_code
我想选择位于具有特定 postal_code
的城镇的所有合作伙伴此查询有效:
SELECT p.nom, v.nom
FROM partner p
JOIN partner_address pa
ON pa.id_partner=p.id
JOIN address a
ON pa.id_address = a.id
JOIN town t
ON a.id_town=t.id
WHERE t.postal_code='13480';
现在我想将它“翻译”成 Doctrine 2 完整语法,遵循 the documentation .
所以我创建了一个自定义存储库:
src/Society/Bundle/MyProjectBundle/Repository/PartnerRepository.php
在此存储库中,我尝试创建相应的函数:
<?php
namespace HQF\Bundle\PizzasBundle\Repository;
use Doctrine\ORM\EntityRepository;
class PartenaireRepository extends EntityRepository
{
/**
* Get all active partners from a given postal code.
*/
public function findAllActiveByCp($cp)
{
return $this->createQueryBuilder('p')
->where('p.dateVFin IS NULL')
->andWhere('p.cp=:cp')
->addOrderBy('p.cp', 'DESC')
->setParameter('cp', $cp);
}
}
注意:代码中的查询不正确,但这段代码在我创建的另一个自定义存储库中有效,所以我尝试从这段代码开始。
我正在尝试类似的方法,但它不起作用:
public function findAllActiveByCp($cp)
{
$qb = $this->createQueryBuilder('p');
return $qb
->leftJoin('partner_address pa ON pa.id_partner=p.id')
->leftJoin('address a ON pa.id_address = a.id')
->leftJoin('town t ON a.id_ville=t.id')
->where('p.dateVFin IS NULL')
->andWhere('t.cp=:cp')
->addOrderBy('t.cp', 'DESC')
->setParameter('cp', $cp);
}
我收到这个错误:
Warning: Missing argument 2 for Doctrine\ORM\QueryBuilder::leftJoin(), called in /blabla/Repository/PartenaireRepository.php on line 18 and defined in /blabla/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php line 767
最佳答案
您必须仅加入所选实体具有的属性。
在 join()
或 leftJoin()
或 xxxJoin()
的第一个参数中,您传递与所选对象相关的属性名称,并且第二个 - 加入实体的别名。
尝试类似这样:
$q = $this->em()->createQueryBuilder();
$q->select(['item', 'itemContact'])
->from('ModuleAdmin\Entity\CustomerEntity', 'item')
->leftJoin('item.contacts', 'itemContact')
->andWhere($q->expr()->like('item.name', ':customerNameStart'));
当然,CustomerEntity
在字段contacts
中包含OneToMany
关系。
请记住,在选择语句中您必须选择根实体(在我的示例中,CustomerEntity
别名为item
)。
由 Olivier Pons 编辑以添加我如何找到解决方案,并将此答案标记为有效,因为它让我走上了正确的轨道,谢谢 Adam!
在文件 PartenaireRepository.php
中,我正确地使用了 createQueryBuilder('p')
。以下是如何使用 createQueryBuilder()
连续进行两个连接:
class PartenaireRepository extends EntityRepository
{
/**
* Retrieval of all partners given for a given postal code.
*/
public function findAllActiveByCp($cp)
{
return $this->createQueryBuilder('p')
->leftJoin('p.adresses', 'a')
->leftJoin('a.ville', 'v')
->where('v.cp=:cp')
->setParameter('cp', $cp);
... blabla
}
}
关于doctrine-orm - createQueryBuilder 和 leftJoin 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552333/
我正在使用 Symfony2,我需要执行此 SQL,例如: select detformacion.* from detformacion left join forma
我试图在 Symfony2.3 中使用查询生成器,但我不断收到错误消息:FatalErrorException:错误:调用成员函数 createQueryBuilder() 在...第 45 行中的非
我正在使用 Typeorm结合 class-validator ,所以我定义了一个这样的实体: import { Entity, PrimaryGeneratedColumn,
在我的存储库类中,我使用: public function getItemsByTag($tag) { $qb = $this->createQueryBuilder('c')
我在执行这个 SQL 请求时遇到了麻烦: SELECT * FROM project LEFT JOIN user ON project.idAuthor=user.id WHERE project.
这很好用 SELECT * FROM podcasttags INNER JOIN podcast ON podcasttags.podcastid = podcast.id INNER JOIN t
我正在使用 Symfony 3.4 并且我在查询时遇到问题: $qb = $this->createQueryBuilder('o') ->leftJoin('o.prices', 'p',
现在我正在尝试通过将内容 ID 与用户 ID 匹配来编写查询返回用户名和内容的代码。这是我的 table 的样子。 我有两个表。 一个是用户表包含username 和userid。 另一个表是内容表,
我一直在尝试创建此 SQL 查询,但第二个参数一直出错。 也许我在这里遗漏了一些东西。 这是我的要求: $pointsTEF = $this->getDoctrine()->getManager();
我有一个实体“交易”,它有一个相关实体“客户”。我想加载与交易相关的客户。 它的工作原理如下: Repository.find({ relations: ['customer'] }); 但是我想做一
我有表实体 - 开发人员和用户。在用户中,我有三个角色 ROLE_DEVELOPER ROLE_FREELANCER 和 ROLE_COMPANY。每个起始用户的所有角色,如果这是用户中的开发人员,则
我在 MySQL 中有这个查询,我想应用到学说中 SELECT * FROM ads_list AS al LEFT JOIN (ads_category AS ac, ads_category_ma
我正在尝试这个 $results = this->get('doctrine')->getManager()->createQueryBuilder() ->select('x.a,
我有一个 itemid 和一个类别 id,它们都是有条件的。如果没有给出,则所有项目都显示为最新的拳头。如果给出了 itemid,则仅显示 id 低于给定 id 的项目(用于分页)。如果给出类别 ID
我有一个“团队”实体,其属性为“预算”。我只想打印团队属性,我希望预算最高的团队出现在第一位、第二位、第三位...(DESC)。 但是使用这段代码,它不起作用,我不明白为什么。 indexAction
你知道我怎样才能从我的 createQueryBuilder 中获取 sql 吗? 我的 Entity/DownloadRepository.php 类: public function getLa
我不知道如何让它工作。 我有: partner 表,包含字段 id 和 name 包含两个字段的 partner_address 表:id_partner 和 id_address 一个表 addre
现在我成功创建了一个函数,使用 Doctrine 的函数 createQueryBuilder 从数据库检索数据。 有人知道是否有类似的函数来插入或更新数据库?或者我如何使用createQueryBu
该代码不起作用。有谁能够帮助我?代码是: class ResultRepository extends EntityRepository { public function findAllB
我正在使用 Doctrine createQueryBuilder() 在 Symfony2 中构造查询。但是,我不想占用该实体中的所有列。如何只选择 ID 和名称? $query = $this->
我是一名优秀的程序员,十分优秀!