1
我有一个实体Log
(表log
)与会员resourceType
和resourceId
(与列resource_log
和resource_id
)。 resourceType
可以例如Order
(用于对订单进行的操作,例如状态更改)或Whatever
(对于Whatever
相关操作)。 Log
与“资源”实体/表之间没有关系(无论在学说还是在数据库中)。如何加入没有在学说中的关系?
现在我只想选择Log
s,这是Order
s与myOrderProperty = "someValue"
。这意味着:
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
):
[Semantical Error] line 0, col 102 near 'o WHERE o.myOrderProperty': Error: Class MyNamespace\Log has no association named order
如何在JOIN
之间没有定义两个实体之间的关系?
我知道,我可以使用inheritance。但从语义上讲,这不是一个继承案例。那么解决这个问题还有另一种方法吗?