У меня есть такой фрагмент кода:
<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);
}
Где ваше заявление об обновлении?
Привет, @Alisher, ваша проблема заключается в коде обновления, который вы показали нам, покажите код обновления и дважды проверьте, что имя вашего класса продукта - «Продукт» или «продукт».
Нам нужно увидеть ваш метод update. Потому что в методе store не выполняется команда update.
Обновление общедоступной функции @ 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); }
проверьте мой последний ответ @AlisherADM
дайте мне знать, сработает ли мой ответ.






Вы должны попробовать это:
{
$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 () не должен вызываться статически
Предлагаю вам изменить подход к обновлению данных. Чтобы обновить данные с помощью 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 )
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «ключ» в «списке полей» (SQL: обновление набора продуктов name = wwwwwwwwwxxx, updated_at = 2018-12-28 09:52:14, key = test, где id = 2 ) -
Это еще одна ошибка. Ваш ключевой столбец не существует или ваш заполняемый массив не включает значение key
Я также рекомендую вам опубликовать фрагменты кода миграции и модели вашего продукта.
так как? Уже работает? Если да, пожалуйста, примите мой ответ
Изменить строку:
$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
storemethod worked fine, I believe you usedproductinstead ofProduct
Вы можете использовать построитель запросов, как показано ниже ...
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);
}
Ваша модель
Productдействительно строчная? Может быть,$product = product::create([должен быть$product = Product::create([?