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
55. Setting up for orders

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
Over the next handful of episodes. We're going to focus on creating an order. We're not going to get to payment just yet
00:06
We're going to leave that to a little bit later on in the course But we want to do a huge amount of things when we order there are lots of different things that need to be covered We of course need to create an order record. We also need to attach the variations from the car We need to reduce stock and we need to clear the car
00:23
So we're going to do all of that stuff in the next few episodes So the first thing I want to do is just reduce what we've got in our cart to a sensible Quantity just so we've got something to work with and we can either be signed in or signed out for this It doesn't really matter. But the first job is to set up the order model and order migration to get this working
00:43
So let's go ahead and make a model in here called order and let's create a migration alongside of that So if we head over to the create orders table migration Let's think about all of the data that we're going to need Now the first thing is we're going to attach a uuid to this just so we have something that we can reference it by
01:01
That isn't the ID this is purely just to be able to pass in to Any endpoint that we create and that's pretty important because if the user isn't signed in we're going to redirect them over to an order Confirmation page not their orders page because of course they don't have an account later on once they do create an account
01:20
We're going to go ahead and hook up all of their orders to that user who has just signed up so what we also want to store in here is the account information of The user that has created the order if they're not authenticated So it will be this email here
01:38
And if you add any other fields to this you will probably want to fill them in as well Now if the user is authenticated, of course, we want to attach it to that user So we'll create a foreign ID in here We'll make this nullable because of course we're implementing guest checkout and we'll go ahead and constrain this as well
01:55
The next thing is going to be the shipping address and the shipping type. So two more foreign IDs in here so let's go ahead and create that out as Shipping Address ID remember we store that
02:11
When we go ahead and press order and also the shipping type ID as well So let's have the shipping type ID in here. And that's it. Okay. So the next thing is going to be the subtotal so let's go ahead and Include this as an integer
02:27
We could technically just grab this from the variations But if they change in the future Then of course it's going to be a little bit trickier to show the user the actual price that they paid now the next three columns are going to be something we're going to work on later and that will be a
02:42
Timestamp for placed at which technically we could take from the created at column Which is created with this timestamps method just here, but we're going to add these in just to demonstrate this out We're going to say packaged at and we're going to say Shipped at so what we're going to do later is when these statuses change
03:04
We're going to detect which sort of place were at in the order and then we're going to send the user An email update to tell them that the order status has changed So we'll get to that a little bit later, but we'll include all three of these in here now. Okay, so that's just about enough let's go ahead and run migrate and
03:24
Create that out and let's head straight over to the order model So we can figure out what the kind of default things we want to do to this model when it's created so let's create out a a
03:37
booted method in here and let's say that when this model is being created and Let's create our closure in here With the order we can type in that if we want to
03:50
We want to go ahead and fill in the UUID because this isn't generated automatically So let's go ahead and cast to a string the result of using the string helper UUID and That will create that in there for us before it's persisted in the database
04:06
And what we're also going to do is say order Placed at and we're going to set that to now So we're going to fill this in almost like it's a created at date, but of course, it's not really It's just an extra column that we've added now because we've done that and added them other
04:23
Columns in we need to specify these under timestamps. So placed at packaged at and shipped at So they will be converted to carbon objects when we pull them out. Let's also fill in our
04:39
Fields that we want to be fillable as well. Or of course we could set that to unguarded Let's fill these in manually So we've got the email address The subtotal which we want to fill and also placed at
04:55
Packaged at and shipped as well. We can always tweak this around later to clean it up Okay, so that should be enough for us to create an order now Fill in all the details we need and we're going to go over to the next episode to look at over on the checkout Actually creating the order down here when we hit checkout
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.