- 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/
代码在 EventUserTypes 模型中 $this->find() ->select(['event_usertypes.user_type_id' , 'usertypes.n
我的 eloquent 模型有一些问题,我尝试将两个不同的表合并为一个 现在我有两个表。 第一个表名称“company_saved_cv” |id|company_id|worker_id | ---
我正在尝试将 leftJoin 添加到 hasOne 方法中,但它似乎不起作用。来自主表的数据存在,但不来自连接表。代码: public function getUser() {
我是 laravel 的新手。 我有两张 table 。1)产品2) 价格 ----------------------------- - products - --
此代码返回“count”和“odds”值完全相同(它们不应该相同)。它实际上只计算“o.id”并为两者返回相同的值。 如何正确计算“b.id”? \DB::table('matches as
我有这个 SQL 代码,我想把它转换成 ormlite - 但我不知道如何以最好的方式做到这一点。 SELECT * FROM Job INNER JOIN Emp ON Job.JobAnsvar
我在使用 leftJoin 进行 laravel select 时遇到问题。我试图选择 2 个帖子并计算有多少条评论(第一个帖子有 7 个评论,第二个 - 0),但我只得到第一个帖子有 7 个评论。
我是 Laravel 的新手,正在学习 leftJoin。 我有一个名为“users”的表,其中行为“steam_id”。 我有另一个名为“匹配”的表。 “匹配”表有一个名为的唯一行“match_
我正在尝试使用此 Controller 删除“ super 管理员”: $user->superadmin = DB::table('role_users AS ru') ->leftJoin('us
这个问题在这里已经有了答案: Join between tables in two different databases? (4 个答案) 关闭 6 年前。 我有一个项目,其中有两个 MySQL
我在 MySQL 中有两个表。 logs 表包含列:time、user_id、event_type users 表有列:email, id 每次用户登录到生成日志文件的系统时,event_type 列
我的数据库中有以下表格: 连接 编号 owner_id 所有者 编号 名 ConnectionsController.php $connections = DB::table('connections
我有一个问题 Select m.name from machines m innerJoin config c ON m.cod = c.cod --> where ( c.categ
在我的 laravel 5.7/eloquent/Mysql 5.5 应用程序中,我需要在聊天列表中获取任何聊天消息的值以及给定 useronly ($user_id) 的任何聊天消息的另外 1 列消
我在类客户和类产品之间有很多关系。例如 数据库客户 | ID | Name | ----------------------- | 01 | Jack | | 02 | Joe | |
如何将以下查询转换为 Doctrine: SELECT restaurants.restaurant_name , restaurants.restaurant_id,
表 1) m_conservationsetting +------------+-------+------------+ | FacilityId | Unit | CategoryId | +
我有一个产品,其描述、名称等以多种语言保存在另一个表中。一种产品可以有多种翻译(产品数据)。 目前,我获得了产品的所有翻译,并执行了 foreach 和 ifs 来根据语言环境获得所需的翻译...如果
我有 3 个模型: 用户 喜欢 发帖 Like 在 user_id 和 post_id(这是其他 2 个模型的 id 列)上使用 CakePHP 约定设置了 2 个外键。 我想运行一个查找,在 Pos
旧的 leftJoin 问题的一个细微变化:我有两个要加入的表: ID Val1 1 100 2 200 3 300 和 ID Val2 2 50 已关注 combine two tables
我是一名优秀的程序员,十分优秀!