Вызов delete () вызывает ошибку сервера

1

Почему моя ошибка delete() вызывает сервер в Silverstripe? Ниже приведен код:

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

Вышеуказанное относится к requireDefaultRecords() и запускается, когда /dev/build? Flush

  • 1
    в чем ошибка ??
  • 0
    ошибка - «ошибка сервера», но когда закомментировано delete (), ошибки нет.
Показать ещё 3 комментария
Теги:
silverstripe

1 ответ

7
Лучший ответ

Product::get()->filter(array('Price' => 26.32)) вернет DataList, а не объект Product. Это связано с тем, что Product::get()->filter() может найти более одного продукта. Это все равно вернет DataList даже если функция filter обнаруживает только один элемент.

Вам нужно пройти через каждый элемент в DataList и удалить каждый из них.

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

foreach ($products as $product) {
    $product->delete(); 
}
  • 0
    Это решает проблему, спасибо 3dgoo, просто интересно, почему нет необходимости в save () при удалении, а сохранение требует сохранения?
  • 2
    $products->removeAll() также будет работать. Он вызывает remove() , который вызывает removeByID($id) и delete() для каждого элемента в списке
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню