Search code examples
phplaravelmany-to-manycrud

Store data in Pivot table in many to many relationship in laravel crud


I am trying to store product_id and supplier_id in pivot table product_supplier but it is not getting displayed in the database pivot table.

ProductController

public function index()
    {
        $products = Product::all();
        return view('manymany.product.index',compact('products'));
    }
    public function create()
    {
        $suppliers = Supplier::all();
        return view('manymany.product.create',compact('suppliers'));
    }
    public function store(Request $request)
    {
        $product = new Product;
        $product->create([
            'name'=>$request->productname,
            'detail'=>$request->detail
        ]);
        $product->suppliers()->attach($request->suppliers);
        return redirect()->route('product.index')->with('successs','Product added successfully!!!');
    }

Product Model

protected $fillable = ['name','detail'];

    public function suppliers(){
        return $this->belongsToMany(Supplier::class, 'product_supplier','product_id','supplier_id');
    }

SupplierController

public function index()
    {
        $suppliers=Supplier::all();
        return view('manymany.supplier.index',compact('suppliers'));
    }
    public function create()
    {
        $products = Product::all();
        return view('manymany.supplier.create',compact('products'));
    }
    public function store(Request $request)
    {
        $supplier = new Supplier;
        $supplier->create([
            'name'=>$request->suppliername,
            'contact'=>$request->contact,
            'email'=>$request->email
        ]);
        $supplier->products()->attach($request->products);
        return redirect()->route('supplier.index')->with('successs','Supplier added successfully!!!');
    }

Supplier Model

protected $fillable = ['name','contact','email'];

    public function products(){
        return $this->belongsToMany(Product::class, 'product_supplier','supplier_id','product_id');
    }

product_supplier migration

public function up(): void
    {
        Schema::create('product_supplier', function (Blueprint $table) {
            $table->id();
            $table->foreignId('product_id')->constrained()->onDelete('cascade');
            $table->foreignId('supplier_id')->constrained()->onDelete('cascade');
            $table->timestamps();
        });
    }

Solution

  • You can try with store value of that record and then use that id in attach method. Here is Updated code you can try..

    public function store(Request $request)
    {
        $supplier = new Supplier;
        $supplier = $supplier->create([
             'name'=>$request->suppliername,
             'contact'=>$request->contact,
             'email'=>$request->email
        ]);
        $supplier->products()->attach($request->products);
        return redirect()->route('supplier.index')->with('successs','Supplier added successfully!!!');
     }