Редактировать / обновить базу данных Laravel

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

У меня есть кнопка добавления, кнопка удаления и кнопка редактирования. Добавление и удаление работают, но при редактировании данные не обновляются.

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

Заранее спасибо.

Вид:

@extends('layouts.app')
@section('content')
    <div class = "container flex-center">
        <div class = "row col-md-8 flex-column">
            <h1>Edit a link</h1>
            @foreach ($links as $link)
            <form action = "{{ url('link/'.$link->id) }}" method = "POST">
              {!! csrf_field() !!}
              @method('PUT')
                @if ($errors->any())
                    <div class = "alert alert-danger" role = "alert">
                        Please fix the following errors
                    </div>
                @endif

                <h3 class = "edit-link-title">{{ $link->title }}</h3>
                {!! csrf_field() !!}
                <div class = "form-group{{ $errors->has('title') ? ' has-error' : '' }}">
                    <label for = "title">Title</label>
                    <input type = "text" class = "form-control" id = "title" name = "title" placeholder = "Title" value = "{{ $link->title }}">
                    @if ($errors->has('title'))
                        <span class = "help-block">{{ $errors->first('title') }}</span>
                    @endif
                </div>
                <div class = "form-group{{ $errors->has('url') ? ' has-error' : '' }}">
                    <label for = "url">Url</label>
                    <input type = "text" class = "form-control" id = "url" name = "url" placeholder = "URL" value = "{{ $link->url }}">
                    @if ($errors->has('url'))
                        <span class = "help-block">{{ $errors->first('url') }}</span>
                    @endif
                </div>
                <div class = "form-group{{ $errors->has('description') ? ' has-error' : '' }}">
                    <label for = "description">Description</label>
                    <textarea class = "form-control" id = "description" name = "description" placeholder = "description">{{ $link->description }}</textarea>
                    @if ($errors->has('description'))
                        <span class = "help-block">{{ $errors->first('description') }}</span>
                    @endif
                    @endforeach
                </div>
                <button type = "submit" class = "btn btn-default submit-btn">Submit</button>
            </form>
        </div>
    </div>
@endsection

веб-контроллер / контроллер маршрута:

use Illuminate\Http\Request;

Route::post('/submit', function (Request $request) {
  $data = $request->validate([
      'title' => 'required|max:255',
      'url' => 'required|url|max:255',
      'description' => 'required|max:255',
  ]);

  $link = tap(new App\Link($data))->save();

  return redirect('/');
});

use App\Link;

Route::delete('/link/{link}', function (Link $link) {
  // Link::destroy($link);
  $link->delete();
  return redirect('/');
});

Route::PUT('/link/{link}', function (Link $link) {
  $link->update();
  return redirect('/');
});
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 432
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В качестве шаблона проектирования часто рекомендуется отделить контроллер от маршрутов. Причина, по которой ваше редактирование не обновляется, заключается в том, что вы не предоставляете модели данные из запроса: -

Route::PUT('/link/{link}', function (Request $request, Link $link) {
    $request->validate([
        'title' => 'required|max:255',
        'url' => 'required|url|max:255',
        'description' => 'required|max:255',
    ]);
    $link->update($request->all());
    return redirect('/');
});

В контроллере вы можете абстрагироваться от логики проверки до вспомогательной функции проверки, чтобы избежать дублирования кода.

Удачи!

Спасибо! Хотя это ошибка после реализации: ErrorException (E_DEPRECATED) Нестатический метод Illuminate \ Http \ Request :: all () не должен вызываться статически

Ruan Petersen 05.10.2018 11:06

Привет, Руан, это связано с вашим оператором включения, см .: stackoverflow.com/questions/28573860/…

T. Altena 05.10.2018 11:08

Измените use Illuminate\Http\Request; на use Request; или вместо этого используйте помощник request()->all();

Iftikhar uddin 05.10.2018 11:09

Спасибо, я исправил это, изменив это: $ link-> update ($ request :: all ()); на это: $ link-> update ($ request-> all ());

Ruan Petersen 05.10.2018 11:11

Другие вопросы по теме