Beste Tweakers,
Ik loop tegen een probleem aan en weet echt niet meer waar ik het moet zoeken inmiddels, laat staan oplossen..
Ik maak gebruik van Darryldecode/shoppingCart voor het afhandelen van mijn winkelmand. Zoals in de handleiding gesteld wordt moet er gebruik gemaakt worden van een uniek ID om elk uniek product te identificeren. Door gebruik te maken van de functie 'associatedModel' verwijs ik naar het modal 'Product'.
Dit is hoe mijn controller eruit ziet voor het afhandelen van het toevoegen van producten aan de winkelmand.
Als ik gebruik van $product->id i.p.v $id bij Cart::add(array( 'id' => ) in de CartController werkt het wel naar behoren, alleen overschrijft hij dan de producten met dezelfde maat in de winkelmand.
Het probleem ontstaat (denk ik) zodra er bij het afrekenen alles opgeslagen moet worden in de database.
In de OrderController maak ik gebruik van de bovenstaande code voor het afhandelen van mijn winkelmand. Bij het opslaan van de data naar de database gaat het verkeerd. Ik krijg dan de volgende foutmelding:
Nu snap ik heel goed waar de foutmelding vandaan komt. Aangezien er in mijn database geen product bestaat met het id: '9ec7f8fe16b552ef04d2394361d79022'. Dus dat de melding volkomen normaal is.
Dit is mijn database migratie:
Hier ligt mijn vraagstuk, ik kom er namelijk totaal niet uit hoe ik het productID kan laten verwijzen i.p.v. het unieke rowID. Aangezien het in de request wel meegestuurd wordt:
Als de foreign product_id naar de products tabel uit mijn migratie haal, werkt het. Alleen wordt het bestelde product niet opgeslagen bij de order.
Mijn vraag voor jullie is of mijn migratie van geen kanten klopt of sla ik een aantal stappen over bij het afhandelen van mijn winkelmand, want daar is helaas in de handleiding niks over te vinden.
Ik loop tegen een probleem aan en weet echt niet meer waar ik het moet zoeken inmiddels, laat staan oplossen..
Ik maak gebruik van Darryldecode/shoppingCart voor het afhandelen van mijn winkelmand. Zoals in de handleiding gesteld wordt moet er gebruik gemaakt worden van een uniek ID om elk uniek product te identificeren. Door gebruik te maken van de functie 'associatedModel' verwijs ik naar het modal 'Product'.
Dit is hoe mijn controller eruit ziet voor het afhandelen van het toevoegen van producten aan de winkelmand.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| public function store(Request $request) { $product = Product::find($request->id); $options = $request->get('options'); $id = md5($product->id.serialize($options)); if($options) { $total = ($product->price) + array_sum(($options)); } else { $total = ($product->price); } Cart::add(array( 'id' => $id, 'name' => $product->title, 'price' => $total, 'quantity' => 1, 'attributes' => $options, 'associatedModel' => $product )); return redirect()->back(); } |
Als ik gebruik van $product->id i.p.v $id bij Cart::add(array( 'id' => ) in de CartController werkt het wel naar behoren, alleen overschrijft hij dan de producten met dezelfde maat in de winkelmand.
Het probleem ontstaat (denk ik) zodra er bij het afrekenen alles opgeslagen moet worden in de database.
code:
1
2
3
4
5
6
7
8
9
| $cartItems = \Cart::getContent(); foreach ($cartItems as $item) { $order->items()->attach($item->id, [ 'price' => $item->price, 'quantity' => $item->quantity, 'attributes' => $item->attributes ]); } |
In de OrderController maak ik gebruik van de bovenstaande code voor het afhandelen van mijn winkelmand. Bij het opslaan van de data naar de database gaat het verkeerd. Ik krijg dan de volgende foutmelding:
code:
1
| SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db_naam`.`order_items`, CONSTRAINT `order_items_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE) (SQL: insert into `order_items` (`attributes`, `order_id`, `price`, `product_id`, `quantity`) values (["wit","xl"], 288, 10.8, 9ec7f8fe16b552ef04d2394361d79022, 1)) |
Nu snap ik heel goed waar de foutmelding vandaan komt. Aangezien er in mijn database geen product bestaat met het id: '9ec7f8fe16b552ef04d2394361d79022'. Dus dat de melding volkomen normaal is.
Dit is mijn database migratie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public function up() { Schema::create('order_items', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('order_id')->index(); $table->unsignedBigInteger('product_id')->index(); $table->float('price'); $table->string('attributes')->nullable(); $table->integer('quantity'); $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade'); $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); $table->timestamps(); }); } |
Hier ligt mijn vraagstuk, ik kom er namelijk totaal niet uit hoe ik het productID kan laten verwijzen i.p.v. het unieke rowID. Aangezien het in de request wel meegestuurd wordt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| { "9ec7f8fe16b552ef04d2394361d79022": { "id": "9ec7f8fe16b552ef04d2394361d79022", "name": "T-shirt", "price": 10.8, "quantity": 1, "attributes": [ "wit", "xl" ], "conditions": [], "associatedModel": { "id": 2, "title": "T-shirt", "image": null, "sku": "202001", "price": "10.80", "created_at": "2021-06-14T19:12:52.000000Z", "updated_at": "2021-09-01T16:21:23.000000Z" } } } |
Als de foreign product_id naar de products tabel uit mijn migratie haal, werkt het. Alleen wordt het bestelde product niet opgeslagen bij de order.
Mijn vraag voor jullie is of mijn migratie van geen kanten klopt of sla ik een aantal stappen over bij het afhandelen van mijn winkelmand, want daar is helaas in de handleiding niks over te vinden.