我有這個疑問了一段時間,但現在是時候問問它。請參見下面的代碼和$someVar
有一個巨大的項目,例如200項目:在foreach循環或外部調用flush()之間的區別,使用哪一個?
// First approach
foreach($someVar as $item) {
$item = $em->getRepository('someEntity')->find($item['value']);
$em->remove($item);
$em->flush();
}
// Second approach
foreach($someVar as $item) {
$item = $em->getRepository('someEntity')->find($item['value']);
$em->remove($item);
}
$em->flush();
- 兩個調用會一樣嗎?意味着從數據庫中刪除記錄?
- 在性能水平上,哪一個最適合使用? (Doctrine有時表現爲記憶殺手)
- 如果兩種方法都很好,我可以使用相同的每個UPDATE查詢嗎?
- 如果任何查詢由於某種原因失敗,我如何捕獲哪一個?也可能是錯誤的學說
測試與實際情況
具有設置在回答了幾個疑點留在我心中的良好的信息給出。看看這一段代碼:
foreach ($request->request->get('items') as $item) {
$items = $em->getRepository('AppBundle:FacturaProductoSolicitud')->find($item['value']);
try {
$em->remove($items);
$em->flush();
array_push($itemsRemoved, $item['value']);
$response['itemsRemoved'] = $itemsRemoved;
$response['success'] = true;
} catch (\Exception $e) {
dump($e->getMessage());
array_push($itemsNonRemoved, $item['value']);
$response['itemsNonRemoved'] = $itemsNonRemoved;
$response['success'] = false;
}
}
我使用的是try {} catch() {}
句話在這裏,因爲我需要知道哪些$item['value']
被刪除或不是爲了將它添加到合適的陣列(見$itemsRemoved
和$itemsNonRemoved
)也爲每個循環執行flush()
,我知道不好的做法,但是,從foreach循環中取出flush
並在try-catch內部執行,有沒有辦法獲得哪個$item['value']
被刪除?怎麼樣?
優秀的答案,但仍有一些疑問,你可以看看我的主要帖子的編輯? – ReynierPM
@ReynierPM謝謝:)我已經更新了答案,回答你的問題,希望它可以幫助 – acontell
又一個驚人的答案,但是請你在離開我的解釋上顯示一些代碼?我不是Symfony的專家,對我來說有些晦澀難懂,但我還在學習,對不對? – ReynierPM