How to JOIN without a relationship in Doctrine?(如何在没有 Doctrine 关系的情况下加入?)
问题描述
我有一个实体Log(表log),成员resourceType 和resourceId(列>resource_log 和 resource_id).resourceType 可以例如Order(用于订单操作,例如状态更改)或 Whatever(用于 Whatever 相关操作).Log 和资源"实体/表之间没有关系(无论是在 Doctrine 中,还是在数据库中).
I have an entity Log (table log) with members resourceType and resourceId (with columns resource_log and resource_id). The resourceType can e.g. Order (for actions on orders, e.g. status changes ) or Whatever (for Whatever related actions). There is no relationships (neither in Doctrine, nor in the database) between the Log and the "resource" entities/tables.
现在我只想选择与 Order 相关的 Log 和 myOrderProperty = "someValue".这意味着:
Now I want to select only the Logs, that are related to Orders with myOrderProperty = "someValue". That means:
SELECT
*
FROM
`log`
JOIN
`order` ON `order`.`id` = `log`.`resource_id` AND `log`.`resource_type` = 'order'
WHERE
`order`.`my_order_property` LIKE '%my_order_property_value%'
但是代码
$queryBuilder = $this->entityManager->createQueryBuilder();
$queryBuilder->select('l')->from(Log::class, 'l');
$queryBuilder->join('l.order', 'o');
...
$queryBuilder
->where('o.myOrderProperty = :myOrderProperty')
->setParameter('myOrderProperty', $myOrderProperty);
不起作用,因为实体 Log 与 Order 没有任何关系(尽管它有一个属性 order):
doesn't work, since the entity Log doesn't have any relationship with the Order (though it has a property order):
[Semantical Error] line 0, col 102 near 'o WHERE o.myOrderProperty': Error: Class MyNamespaceLog has no association named order
如何在两个实体之间没有定义关系的情况下JOIN?
我知道,我可以使用 继承.但从语义上讲,它不是继承的情况.那么有没有其他办法解决这个问题?
I know, I could use inheritance. But semantically it's not an inheritance case. So is there another way for solving the problem?
推荐答案
没有关系的JOIN可以这样实现:
The JOIN without relationship can be implemented like this:
$queryBuilder = $this->entityManager->createQueryBuilder();
$queryBuilder->select('l')->from(Log::class, 'l');
$queryBuilder->join(
Order::class,
'o',
DoctrineORMQueryExprJoin::WITH,
'o.id = l.resourceId'
);
...
$queryBuilder
->where('o.myOrderProperty = :myOrderProperty')
->setParameter('myOrderProperty', $myOrderProperty);
唯一的问题是,加入的实体没有添加到主实体中,因此 $myLog->getOrder(...) 返回 null.
The only problem is, that the joined entities are not added to the main entity, so that $myLog->getOrder(...) returns null.
这篇关于如何在没有 Doctrine 关系的情况下加入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在没有 Doctrine 关系的情况下加入?
基础教程推荐
- 在PHP中根据W3C规范Unicode 2022-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- 如何在 Laravel 中使用 React Router? 2022-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
- 如何替换eregi() 2022-01-01
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
