Нестатический метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически - PullRequest
0 голосов
/ 28 декабря 2018

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

<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>

Я получил следующую ошибку:

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

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

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); 
 }

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Я предлагаю вам изменить подход к обновлению данных.Чтобы обновить данные с помощью 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);
}
0 голосов
/ 29 декабря 2018

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

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

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

  DB::table('product')->update([ 'key' => $request['key'], 'name' => $request['name']]); 
0 голосов
/ 28 декабря 2018

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

{

    $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');
}
...