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。但從語義上講,這不是一個繼承案例。那麼解決這個問題還有另一種方法嗎?