Ошибка «Вызов неопределенного метода stdClass :: delete ()» при попытке удалить строку в Laravel

Мой метод удаления изображения из базы данных и локального хранилища.

public function destroy($id) { $image = DB::table('images')->where('id', '=', $id)->first(); //print_r($image); //return 'end'; File::delete(public_path() . '/images/gallery/thumb-' . $image->path); File::delete(public_path() . '/images/gallery/' . $image->path); $image->delete(); return Redirect::back() ->with('form_success', 1) ->with('form_message', 'Image successfully deleted!'); } 

Если я попытаюсь вернуть значение $image я получаю:

 stdClass Object ( [id] => 49 [site_id] => 1 [page_id] => [location] => gallery [alt] => [path] => 60e52a2755ffe8923d5ac1232f5d9154.jpg ) 

Итак, что случилось с моим кодом? Теперь моя версия Laravel – 4.2.1, но я пытаюсь понизить его до 4.1.17, но никаких изменений.

Измените свой код в соответствии со следующим, и я надеюсь, что ваша проблема будет решена.

 public function destroy($id) { $query = DB::table('images')->where('id', '=', $id); $image = $query->first(); //print_r($image); //return 'end'; File::delete(public_path() . '/images/gallery/thumb-' . $image->path); File::delete(public_path() . '/images/gallery/' . $image->path); $query->delete(); return Redirect::back() ->with('form_success', 1) ->with('form_message', 'Image successfully deleted!'); } 

first () и delete () эти функции выполняют код. Сначала назначьте свои условия переменной и затем выполните их отдельно.

Проблема заключается в том, что вы вызываете first() , запрос выполняется и результаты возвращаются. Вам нужно будет вызвать delete() перед вызовом first() .

DB::table('images')->where('id', $id)->delete();

Поскольку вы используете построитель запросов, вы собираетесь вернуть объекты stdClass (которые не имеют методов удаления), как вы видели, а не модели, которые вы обычно получаете при использовании Eloquent.