This episode is for members only

Sign up to access "Build an E-Commerce Platform" right now.

Get started
Already a member? Sign in to continue
Playing
57. Attaching variations to order

Episodes

0%
Your progress
  • Total: 8h 42m
  • Played: 0m
  • Remaining: 8h 42m
Join or sign in to track your progress
01. Introduction and demo
9m 42s
0%
02. Installing Laravel, Breeze and Livewire
4m 47s
0%
03. Creating categories
9m 4s
0%
04. Recursively displaying categories
8m 21s
0%
05. Product model and migration
2m 50s
0%
06. Showing a product
7m 50s
0%
07. Product variation setup
10m 26s
0%
08. Creating the product selector
10m 34s
0%
09. Loading child variation dropdowns
4m 28s
0%
10. Faking adding the final variation
9m 33s
0%
11. Setting up product stock
4m 34s
0%
12. Calculating variation stock levels
9m 1s
0%
13. Adding product images with MediaLibrary
8m 50s
0%
14. Creating the product gallery
7m 28s
0%
15. Providing a fallback image
2m 56s
0%
16. Adding media to product variations
3m 37s
0%
17. Creating the cart model
3m 37s
0%
18. Registering the cart service
6m 34s
0%
19. Creating a cart session
11m 4s
0%
20. Showing the cart in the navigation
9m 19s
0%
21. Caching the cart instance
3m 2s
0%
22. Adding items to the cart
14m 1s
0%
23. Creating the notification component
8m 5s
0%
24. Showing the user's cart
6m 50s
0%
25. Outputting cart items
4m 50s
0%
26. Showing variation specifics
8m 8s
0%
27. Updating item quantity
8m 2s
0%
28. Removing an item from the cart
6m 1s
0%
29. Calculating the cart summary
8m 7s
0%
30. Showing the category products page
5m 1s
0%
31. Indexing products in Meilisearch
8m 32s
0%
32. Hooking up products to categories
4m 15s
0%
33. Building the product browser
13m 32s
0%
34. Showing child categories
1m 51s
0%
35. Indexing product variations for filtering
8m
0%
36. Outputting variations for filtering
12m 52s
0%
37. Hooking up product filters with Livewire
7m 48s
0%
38. Filtering products
12m 24s
0%
39. Filtering by price
9m 50s
0%
40. Adding global navigation search
7m 50s
0%
41. Handling products that are not live
3m 22s
0%
42. Price range category fix
1m 18s
0%
43. Scaffolding the checkout page
8m 6s
0%
44. Listing shipping options
9m 3s
0%
45. Calculating the cart totals
2m 52s
0%
46. Validating the account form
9m 10s
0%
47. Validating the shipping form
5m 47s
0%
48. Saving the shipping address
8m 4s
0%
49. Selecting a saved shipping address
6m 39s
0%
50. Fix shipping address error for non authenticated users
1m 7s
0%
51. Redirecting if the cart is empty
2m 42s
0%
52. Checking for quantity changes
7m 11s
0%
53. Syncing if quantities have changed
11m 59s
0%
54. Flashing a message when quantities have changed
5m 48s
0%
55. Setting up for orders
5m 17s
0%
56. Creating an order
13m 24s
0%
57. Attaching variations to order
6m 13s
0%
58. Reducing stock after ordering
2m 56s
0%
59. Meilisearch filter query fix
1m 33s
0%
60. Showing the order confirmation page
7m 39s
0%
61. Attaching orders for registering guest users
5m 17s
0%
62. Scaffolding the orders page
5m 30s
0%
63. Filling in order variation details
5m 24s
0%
64. Returning the order status
4m 39s
0%
65. Detecting order status changes
10m 49s
0%
66. Sending the order status change email
5m 12s
0%
67. Sending an order confirmation email
2m 47s
0%
68. Handling deleted cart records
4m 44s
0%
69. Transferring the guest cart
2m 44s
0%
70. Creating a presenter for the order status
4m 31s
0%
71. Setting up Stripe
3m 43s
0%
72. Creating and updating a PaymentIntent
16m 21s
0%
73. The Stripe card form
3m 35s
0%
74. Validating before payment
5m 34s
0%
75. Submitting a payment
6m 40s
0%
76. Checking for a successful payment
5m 47s
0%
77. Handling Stripe client errors
3m 11s
0%
78. Entangling Stripe customer data
2m 18s
0%

Transcript

00:00
We finished up in the last episode creating the order, but of course we don't know which products have been attached to this order. We've got a subtotal, but that's pretty much it. Now, we are going to replicate what we did with the cart and the cart variation with the orders,
00:15
and we're going to have an order variation pivot table, which gives us the products that have been ordered and the quantities. That means that over on our orders page, we can show the order details like the subtotal, remember which is static in case the variation prices change,
00:30
but we can then show each of the variations that are attached to that order as well. We're going to be doing this down here directly after we've saved the order. Now, things are getting a little bit long here. We're doing lots of different things here.
00:41
We're going to be tidying this up a little bit later with events and listeners, but for now, let's just put it all in here just so it's easy to see what we're doing. Okay, before we do anything, let's go ahead and create out this pivot table to sync our order with our variation. So let's go ahead and make a migration, and we'll create our order variation table,
01:06
and let's head over to that order variation table, and this is pretty straightforward. We just need two foreign IDs. So we need the order ID, and we'll constrain that,
01:22
and we need the variation ID, and we'll constrain that, and we also, of course, want to make sure we show how many we've ordered. So let's go ahead and add in some quantity. Okay, let's go ahead and run phpArt and migrate, and we're good.
01:39
So let's head over to our order model first of all, and let's create this relationship out. So we're going to go ahead and say variations, kind of makes sense. We'll keep it the same name, and of course, because this is a pivot,
01:53
we want to say belongs to many, variation, and we've got that pivot in there. So let's say with pivot, and we'll put quantity in there, and we'll also say with timestamps, so we get them timestamps filled when we insert this. Okay, that's pretty much it.
02:12
Now we need to figure out how to attach those variations. Now normally what we would do is something like order, variations, and attach. So we've already saved this, so we're just attaching these now, and we would say cart and contents.
02:30
Remember, that gives us back a collection of variations. The only problem with this is this will attach them, but not with the quantities. So if we just head over to order variation, it won't fill in the quantities. So what we want to do is map through this and build up an array with the quantities in there,
02:50
kind of like what we did over on our cart model when we synced our available quantities. Remember, we mapped through with keys and returned this array structure, so we had the ID of the variation and the quantity. So we want to do something very similar to this directly within here.
03:09
So we'll go ahead and grab the contents from the cart, but then we'll go ahead and map through these with keys, so we get them keys output for each of the variations, and let's go ahead and just create a standard closure in here just to keep this simple,
03:23
and let's grab the variation for each of them loops, and then we're going to go ahead and return from here the variation ID and then the pivot information, which is the quantity. So we know that that is variation, pivot, and quantity.
03:42
Okay, so we'll tidy this up with a short closure in just a minute, a short function in PHP. Let's just see if this works first of all. So if we come over to the database under orders, let's get rid of this order and let's come over and reorder something in here.
03:57
So we'll just choose any address and let's just click confirm order and pay. Okay, so it looks like we've got a variation ID being inserted here of zero, which of course because we have that constraint set up isn't working. Let's just figure out what we're doing here.
04:12
The first thing we do want to do is make sure this is an array, and second of all, that is what we want to do. We're not assigning this, we're using an arrow in here, so that should fix that up. Now that order will have been created, so let's get rid of that.
04:28
Come back over and let's try and create this again. Great, so that looks like it's worked. So we've got the order created with an ID of seven, and over in order variation, sure enough, that variation there,
04:40
size eight in that one that we chose with a quantity of one, has been attached. Now let's just delete this in here and delete this order, and let's go and in fact just clear up all of these empty carts. So why don't we just truncate this and we'll do a restart entity in Cascade.
05:01
Let's go over, give this a refresh, that'll probably break because of course the cart can't be found anymore, and we'll fix this up later, but let's get rid of our session, and let's just start from scratch.
05:12
So we'll go over to Nike Air Force One. Let's add one of these, and let's search for Nike again, and we'll add one of these. There we go.
05:25
So when we order both of these, if we change the quantities up as well, so let's do two and five. So when we order both of these, this should work nicely. I'm going to go ahead and log in just for the sake of not having to fill out all of this information again,
05:41
and let's just choose an address and confirm this. Okay, so let's head over to the orders table that has of course been created, and then over in order variation, we've got two products now attached to that order, both of them different variations, which we know,
05:59
and then of course the correct quantities have also been attached here as well. So of course when we see that order, we know exactly how many to dispatch, and that's pretty much it. We are now attaching the variations to an order.
78 episodes8 hrs 42 mins

Overview

Build a robust e-commerce platform with a Laravel and Livewire. Features products with unlimited and flexible variations, a product browser with filters and price range slider, global product search, guest checkout, shipping and payment implementation, order status tracking and more.

Alex Garrett-Smith
Alex Garrett-Smith
Hey, I'm the founder of Codecourse!

Comments

No comments, yet. Be the first to leave a comment.