Home > database >  Laravel relationship storing to pivot null
Laravel relationship storing to pivot null

Time:02-22

I have 3 tables called games, products, game_product. And game_product is my pivot table

This is the structure.

id game_id product_id
1 1 1
1 1 2

30 Minutes ago I can attach the game_id and product_id correctly, then i changed nothing. And after I tried to create a new data, its give me this error message

Call to a member function games() on null

This is my model relationship

App\Models\Game.php :

public function products()
    {
        return $this->belongsToMany('App\Models\Product', 'game_product', 'product_id', 'game_id');
    }  

App\Models\Product.php :

public function games()
    {
        return $this->belongsToMany('App\Models\Game', 'game_product', 'game_id', 'product_id'  );

And this is my create controller

public function productsNew(Request $request, $id)
    {   
        $products = Product::find($id);
        
        $new = Product::create([
            'product_sku' => $request->product_sku,
            'name' => $request->name,
            'seller_price' => $request->seller_price,
            'price' => $request->price,
            'profit' => $request->price - $request->seller_price,
        ]);

        $products->games()->attach($id);
        $new->save();

        
        notify("Product added successfully!", "", "success");
        return redirect('admin/products/'.$id);
    }
    }

I try to post the id of game and product to pivot table game_id and product_id. What should I do to store the ID only without any other of value?

CodePudding user response:

Just change the order of

$products->games()->attach($id);
$new->save();

to be

$new->save();
$products->games()->attach($id);

As a side note, you are creating a product. Just 1 product. So the variable name mustn't be pluralized as it is singular. $product

One final thing, if this function is just part of the CRUD, please follow the convention of naming functions to be: create/store/show/edit/update/destroy, makes your and everyone else's lives easier when asking questions.

  • Related