Мой метод удаления изображения из базы данных и локального хранилища.
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.