2015-10-11 144 views
1

爲什麼我的delete()在Silverstripe中導致服務器錯誤?下面是代碼:以上調用delete()導致服務器錯誤

$product = Product::create(); 
$product = Product::get()->filter(array('Price' => 26.32)); 
$product->delete();  

requireDefaultRecords()和運行時的/ dev /建造沖洗

+1

什麼是錯誤? –

+0

錯誤是「服務器錯誤」,但是當delete()被註釋掉時沒有錯誤。 – SIlverstripeNewbie

+0

你的錯誤報告設置是錯誤的,這就是爲什麼你沒有得到具體的錯誤。 – markus

回答

7

Product::get()->filter(array('Price' => 26.32))將返回DataList,不是Product對象?這是因爲Product::get()->filter()可能會找到多個產品。即使filter函數只能找到一個項目,這仍然會返回DataList

你需要做的是通過DataList中的每個項目並刪除每個項目。

$newProduct = Product::create(); 
$products = Product::get()->filter(array('Price' => 26.32)); 

foreach ($products as $product) { 
    $product->delete(); 
} 
+0

這解決了它,謝謝3dgoo,只是想知道爲什麼在刪除時不需要save(),但需要保存時需要保存嗎? – SIlverstripeNewbie

+2

'$ products-> removeAll()'也可以。它調用'remove()'調用'removeByID($ id)'和'delete()'來調用列表 –

+1

'write()'中的每個項目,以便將所有更改寫入數據庫。 'delete()'不需要'write()'調用,因爲它不會對對象進行任何更改,它只會刪除對象。 – 3dgoo

相關問題