我有幾個數據庫表,其中有兩個主鍵id
和date
。我不更新記錄,而是插入帶有更新信息的新記錄。這個新記錄具有相同的id
和date
字段是NOW()。我將使用產品表來解釋我的問題。Doctrine 2編輯實體DQL
我希望能夠在特定日期請求產品詳細信息。因此,我在DQL中使用以下子查詢,該工作正常:
WHERE p.date = (
SELECT MAX(pp.date)
FROM Entity\Product pp
WHERE pp.id = p.id
AND pp.date < :date
)
此產品表包含一些引用表,如類別。此類別表具有相同的id
和date
主鍵組合。我希望能夠在特定日期請求產品詳細信息和類別詳細信息。因此,我擴大了DQL如上圖所示爲以下,這也能正常工作:
JOIN p.category c
WHERE p.date = (
SELECT MAX(pp.date)
FROM Entity\Product pp
WHERE pp.id = p.id
AND pp.date < :date
)
AND c.date = (
SELECT MAX(cc.date)
FROM Entity\ProductCategory cc
WHERE cc.id = c.id
AND cc.date < :date
)
然而,正如你所看到的,如果我有多個引用的表,我將不得不復制同一塊DQL的。我想以某種方式將這些子查詢添加到實體中,以便每次調用實體時都會添加此子查詢。
我曾想過在__construct($date)
或某種setUp($date)
方法中添加這個,但我有點卡在這裏。此外,它是否有助於將@Id
添加到Entity\Product::date
?
我希望有人能幫助我。我並不期望有一個完整的解決方案,我們將非常感激朝着良好方向邁出的一步。