(使用cascade=persist
)的獨立實體調用persist()
和flush()
之前我做多次調用$this->myDependentEntityCollection[] = $myDependentEntity;
(即它的類型ArrayCollection
或PersistentCollection
。學說2的ArrayCollection :: Add()方法仍然存在項目以相反的順序
但是,集合中的依賴實體的保存順序與它們添加的順序相反(我猜他們使用堆棧,然後逐個彈出項目)。
以下面的示例爲例Order
和Item
與1:N
的關係:
// Order.php
/* (...doctrine stuff..., cascade={"persist"}) */
protected $items;
public function addItem(Item $item) {
$item->setOrder($this);
$this->items[] = $item;
}
// Item.php
public function setOrder(Order $order) {
$this->order = $order;
}
// Somewhere else in the code
$order->addItem($item1);
$order->addItem($item2);
$order->addItem($item3);
$em->persist($order);
$em->flush();
他們得到持續的順序item3
,item2
,item1
;而不是1,2,3
。
我該如何使它們以正確的順序保存?
你可以嘗試排序之前堅持.... – Matteo
@Matteo我想這種做法。不知道如何排序ArrayCollection。 –
有點偏題,但它有關係嗎?我一直認爲我們不應該依賴數據庫中記錄的順序。當您檢索這些項目時,應該設置這些項目的順序IMO。儘管如此,有趣的問題。 – Veve