Нестатический метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически

У меня есть такой фрагмент кода:

<div class = "form-group row">
    <label for = "image" class = "col-form-label">Изображение</label>
    <input id = "image" type = "file" class = "form-control{{ $errors->has('image') ? ' is-invalid' : '' }}" name = "image" value = "{{ old('image', $products->image) }}">
    @if ($products->image)
       <img src = "{{ Storage::url($products->image) }}" alt = "" style = "width: 150px">
    @endif
    @if ($errors->has('image'))
       <span class = "invalid-feedback"><strong>{{ $errors->first('image') }}</strong></span>
    @endif
</div>

Получила следующую ошибку:

Non-static method Illuminate\Database\Eloquent\Model::update() should not be called statically

и у меня есть контроллер:

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required|string|max:255',
        'image' => 'required|image|mimes:jpg,jpeg,png',
    ]);
    $file = request()->file('image') ? request()->file('image')->store('images', 'public') : null;
    $product = product::create([
        'name' => $request['name'],
        'description' => $request['description'],
        'image' => $file,
    ]);
    return redirect()->route('products.index', $product);
}

Это CRUD

 public function update(Request $request, $id) 
 {
    $this->validate($request, [ 'key' => 'required|string|max:255', // 'value' => 'required', ]); 
    $product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 
    return redirect()->route('products.show', $product); 
 }

Ваша модель Product действительно строчная? Может быть, $product = product::create([ должен быть $product = Product::create([?

Jeremy Harris 28.12.2018 05:30

Где ваше заявление об обновлении?

Thai Nguyen Hung 28.12.2018 05:32

Привет, @Alisher, ваша проблема заключается в коде обновления, который вы показали нам, покажите код обновления и дважды проверьте, что имя вашего класса продукта - «Продукт» или «продукт».

Raj 28.12.2018 06:10

Нам нужно увидеть ваш метод update. Потому что в методе store не выполняется команда update.

adrianriyadi 28.12.2018 06:51

Обновление общедоступной функции @ n1njac0de (Request $ request, $ id) {$ this-> validate ($ request, ['key' => 'required | string | max: 255', // 'value' => 'required', ]); $ product = product :: update (['key' => $ request ['key'], 'name' => $ request ['name'], // 'value' => $ request ['value'], ]); return redirect () -> route ('products.show', $ product); }

Jun ADM 28.12.2018 07:10

проверьте мой последний ответ @AlisherADM

adrianriyadi 28.12.2018 07:45

дайте мне знать, сработает ли мой ответ.

adrianriyadi 28.12.2018 07:59
Стоит ли изучать 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 и хотите разрабатывать...
1
7
10 728
7

Ответы 7

Вы должны попробовать это:

{

    $this->validate($request, [
        'name' => 'required|string|max:255',
        'image' => 'required|image|mimes:jpg,jpeg,png',
    ]);

    $file = request()->file('image') ? request()->file('image')->store('images', 'public') : null;
    $product = product::create([
        'name' => $request['name'],
        'description' => $request['description'],
        'image' => $file,
    ]);

    return redirect()->route('products.index');
}

Я получил следующую ошибку: нестатический метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически

Jun ADM 28.12.2018 07:08

Предлагаю вам изменить подход к обновлению данных. Чтобы обновить данные с помощью Laravel (на самом деле, не только Laravel, но и вообще всех языков программирования и запросов, таких как MySQL), вам необходимо определить, какую запись вы хотите обновить. В Laravel вы можете сделать это с помощью метода find. Конечно, вы можете использовать другой метод, например WHERE. Итак, чтобы ответить на вашу проблему, вы не можете делать обновление, подобное созданию. Следовательно, код вашего метода update должен выглядеть так:

public function update(Request $request, $id)
{
    $this->validate($request, [
        'key' => 'required|string|max:255',
        // 'value' => 'required',
    ]);
    $product = Product::find($id); //get the object of product you want to update
    $product->key = $request['key'];
    $product->name = $request['name'];
    //$product->value = $request['value'];
    $product->save();

    return redirect()->route('products.show', $product);
}

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «ключ» в «списке полей» (SQL: обновление products set name = wwwwwwwwwxxx, updated_at = 2018-12-28 09:52:14, key = test, где id = 2 )

Jun ADM 28.12.2018 10:53

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «ключ» в «списке полей» (SQL: обновление набора продуктов name = wwwwwwwwwxxx, updated_at = 2018-12-28 09:52:14, key = test, где id = 2 ) -

Jun ADM 28.12.2018 12:29

Это еще одна ошибка. Ваш ключевой столбец не существует или ваш заполняемый массив не включает значение key

adrianriyadi 28.12.2018 13:07

Я также рекомендую вам опубликовать фрагменты кода миграции и модели вашего продукта.

adrianriyadi 28.12.2018 14:51

так как? Уже работает? Если да, пожалуйста, примите мой ответ

adrianriyadi 11.01.2019 17:21

Изменить строку:

  $product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

Изменить строку на: здесь "продукт" будет именем таблицы

  DB::table('product')->update([ 'key' => $request['key'], 'name' => $request['name']]); 

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

<form action = "{{ route ('products') }}/{{ $product->id }}" method = "post">
@csrf 
@method('PATCH')

Предлагаю вам изменить подход к обновлению данных. Чтобы обновить свои данные с помощью Laravel или добавить, где это поможет

преобразовать это:

product::update([ 'key' => $request['key'],'name' => $request['name']);

к:

product::where('id',$id)->update([ 'key' => $request['key'],'name' => $request['name']);

или:

product::find($id)->update([ 'key' => $request['key'],'name' => $request['name']);

Изменить строку

$product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

К

$product = (new product)->update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

Note: It is always advisable to follow the Laravel convention. So Product instead of product would be better for the model name. However, use the exact case of the class name. Your model file wasn't posted but since your store method worked fine, I believe you used product instead of Product

Вы можете использовать построитель запросов, как показано ниже ...

DB::table('products')->where('id', $id)->update(['value' => $request->value"]);

ИЛИ вы можете использовать Eloquent, как показано ниже ...

Product::where('id', $id)->update(['value' => $request->value"]);

Ваш код должен выглядеть так, как показано ниже ...

public function update(Request $request, $id) 
{
    $this->validate($request, [ 'key' => 'required|string|max:255', // 'value' => 'required', ]); 
    $product = product::where('id', $id)->update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 
    return redirect()->route('products.show', $product); 
}

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