Laravel save shows true, but theres nothing in database

I know this question is repeated, but trying out several of the answers of those questions has done nothing for me.

In short, I have this store method:

public function store(Request $request)
{
    $selected_products = json_decode($request->selectedproducts);

    $cart = new Cart();
    
    $cartprods = CartProd::hydrate( $selected_products );

    // This sums all the end costs to get a total cost
    // And saves the cart so that its id is not null
    $final_cost = 0;
    foreach ($cartprods as $prod) {
        $final_cost += $prod->cost;
    }
    $cart->cost = $final_cost;
    $cart->user_id = Auth::user()->id;
    $cart->save();

    foreach ($cartprods as $prod) {
        $prod->cart_id = $cart->id;
        $og_product = Product::FindOrFail($prod->product_id);
        $og_product->amount -= $prod->amount;
        $og_product->save();
        $prod->save();
        dd($prod->save());
    }
    
    return redirect()->route('cart');
}

Doing the dd above shows true, but going into my database and doing select * says that its an empty set.

Here is my CartProd model:

<?php

namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;

class CartProd extends Model
{
use HasFactory;

protected $table = 'cartprod';
protected $primaryKey = 'id';
protected $fillable = [
    'unit_price',
    'amount',
    'discount',
    'cost',
    'cart_id',
    'product_id',
];

public function cart()
{
    return $this->belongsTo(Cart::class, 'cart_id');
}

public function product()
{
    return $this->belongsTo(Product::class, 'product_id');
}
}

And just because it might be useful, these are the commands for the migrations of the table (they’re in their own migration file, so there’s no issue there):
Schema::create('cartprod', function (Blueprint $table) {
    $table->id();
    $table->decimal('unit_price',9,2);
    $table->integer('amount');
    $table->integer('discount');
    $table->decimal('total_cost',9,2);
    $table->timestamps();
});
Schema::table('cartprod', function (Blueprint $table) {
    $table->foreignId('cart_id')->references('id')->on('cart');
});
Schema::table('cartprod', function (Blueprint $table) {
    $table->foreignId('product_id')->references('id')->on('product');
});

Having searched for the answer I found several others that didn’t helped me, like the $primaryKey matching the name on the database (it does), or others that didn’t fit my model. Thanks a lot for your help!

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Thanks to @Lyzvaleska for the suggestion! Turns out the Hydrate function was the problem, so all I had to do is replace it and create each cartprod with a foreach as such:

public function store(Request $request)
{
    $selected_products = json_decode($request->selectedproducts);

    $cartprods = array();
    $final_cost = 0;
    foreach ($selected_products as $prod) {
        $final_cost += $prod->total_cost;
        $selProd = new CartProd();
        $selProd->unit_price = $prod->unit_price;
        $selProd->amount = $prod->amount;
        $selProd->discount = $prod->discount;
        $selProd->total_cost = $prod->total_cost;
        $selProd->cart_id = $prod->cart_id;
        $selProd->product_id = $prod->product_id;
        array_push($cartprods, $selProd);
    }

    $cart = new Cart();
    $cart->cost = $final_cost;
    $cart->user_id = Auth::user()->id;
    $cart->save();

    foreach ($cartprods as $prod) {
        $prod->cart_id = $cart->id;
        $og_product = Product::FindOrFail($prod->product_id);
        $og_product->amount -= $prod->amount;
        $og_product->save();
        $prod->save();
    }
    
    return redirect()->route('cart');
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x