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

1) Когда я пытался использовать модель в функции обновления контроллера, я получаю сообщение об ошибке? В чем может быть причина. Я получил ошибку: нестатический метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически

2) Другая проблема заключается в том, что моя функция удаления не удаляет продукт. Он перенаправляет на другую страницу. В чем может быть ошибка в маршрутах?

ProductController.php

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products=product::all();
        return view('products', ['products'=>$products]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('createProduct');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        Product::create(request()->validate([
            'title' => 'required',
            'type' => 'required',
            'firstname' => 'required',
            'surname' => 'required',
            'price' => 'required',
            'papl' => 'required'
        ]));



        return redirect('/products');

    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $id)
    {
       
        return view('singleProduct', ['product'=>$id]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $id)
    {
        
        return view('editProduct', ['product'=>$id]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Product $id)
    {
        Product::update(request()->validate([
            'title' => 'required',
            'type' => 'required',
            'firstname' => 'required',
            'surname' => 'required',
            'price' => 'required',
            'papl' => 'required'
        ]));



        return redirect('/products');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $product=product::find($id)->delete();
        return redirect('/products');
    }
}

Модель: Product.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //protected $guarded = [];
    protected $fillable = ['title', 'type', 'firstname', 'surname', 'price', 'papl'];
    //use HasFactory;
    
}

Путь удаления:

Route::delete('/products/{id}',[ProductController::class, 'delete'])->name('deleteProduct');

deleteProduct.blade.php

@extends('layouts/masterlayout')
@section('title', 'All Products')
@section('mainbody')
<form method = "POST" action="../../products/{{$product->id}}">
    @csrf
    @method('DELETE')
    <label>Product Name</label>
    <input type = "text" name="title" value="{{$product->title}}">
    <label>Product Type</label>
    <input type = "text" name="type" value="{{$product->type}}">
    <label>Price</label>
    <input type ="number" name="price" value="{{$product->price}}">
    <label>Firstname</label>
    <input type ="text" name="firstname" value="{{$product->firstname}}">
    <label>Surname</label>
    <input type ="text" name="surname" value="{{$product->surname}}">
    <label>Playlength/ PageNumber</label>
    <input type ="number" name="papl" value="{{$product->papl}}">
</form>
@endsection

person Aaheana    schedule 28.12.2020    source источник
comment
Так нельзя вызывать функцию обновления, должно быть так $id->update([])   -  person Mudit Gulgulia    schedule 28.12.2020
comment
попробуйте это $variblename->update([]);   -  person Arjun bhati    schedule 28.12.2020


Ответы (1)


Контроллер

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products = Product::all();
        return view('products', compact('products'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('createProduct');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        Product::create($request->validate([
            'title'     => 'required',
            'type'      => 'required',
            'firstname' => 'required',
            'surname'   => 'required',
            'price'     => 'required',
            'papl'      => 'required'
        ]));

        return redirect('/products');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $product)
    {
        return view('singleProduct', compact('product'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $product)
    {
        return view('editProduct', compact('product'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Product $product, Request $request)
    {
        $product->update($request->validate([
            'title'      => 'required',
            'type'       => 'required',
            'firstname'  => 'required',
            'surname'    => 'required',
            'price'      => 'required',
            'papl'       => 'required'
        ]));

        return redirect('/products');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy(Product $product)
    {
        $product->delete();
        return redirect('/products');
    }
}

Модель

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;
    protected $fillable = [
        'title', 'type', 'firstname', 'surname', 'price', 'papl'
    ];
    
}

Web.php

<?php

use Illuminate\Support\Facades\Route;

Route::resource('product', ProductController::class);

Файл Blade

@extends('layouts.masterlayout')
@section('title', 'All Products')
@section('mainbody')
    <form method="POST" action="{{ route('product.destroy', $product->id) }}">
        @csrf @method('delete')
        <label>Product Name</label>
        <input type="text" name="title" value="{{ $product->title }}">
        <label>Product Type</label>
        <input type="text" name="type" value="{{ $product->type }}">
        <label>Price</label>
        <input type="number" name="price" value="{{ $product->price }}">
        <label>Firstname</label>
        <input type="text" name="firstname" value="{{ $product->firstname }}">
        <label>Surname</label>
        <input type="text" name="surname" value="{{ $product->surname }}">
        <label>Playlength/ PageNumber</label>
        <input type="number" name="papl" value="{{ $product->papl }}">
    </form>
@endsection
person Mudit Gulgulia    schedule 28.12.2020
comment
Я смог решить проблему с обновлением, но продукт не удалось удалить - person Aaheana; 28.12.2020
comment
поместите dd ($ id) в метод уничтожения и проверьте вывод - person Mudit Gulgulia; 28.12.2020
comment
Он перенаправляет на эту страницу: localhost / ProductManagementSystem / public / products / 1 - person Aaheana; 28.12.2020
comment
Замените его на public function destroy(Product $id) { dd($id); $id->delete(); return redirect('/products'); } - person Mudit Gulgulia; 28.12.2020
comment
Он перенаправляет на эту страницу: localhost / ProductManagementSystem / public / products / 1 - person Aaheana; 28.12.2020
comment
Есть ли ошибка при перенаправлении в форме удаления - person Aaheana; 28.12.2020
comment
Я добавил фрагмент кода для файла лезвия, попробуйте это. - person Mudit Gulgulia; 28.12.2020
comment
Пожалуйста, убедитесь, что я отредактировал ваш предыдущий код и протестировал его локально, он работает нормально. - person Mudit Gulgulia; 28.12.2020