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
17. Creating the cart model

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
Our next goal is to get our cart working but we need to start with where we're going to store the
00:05
items that are in a user's cart. Really importantly we need to bear in mind that we are allowing guest carts as well not just authenticated users. So we're going to go over and create a model in the database or model for the database to go ahead and store a cart session. So let's create a model create a migration alongside of this and let's open up the migration and think about the kind
00:31
of data that we need. So inside of here remember this does not necessarily get attached to a user so we do want a user in here for when the user signs in so we can associate it but we want to make this nullable. So let's go ahead and add in that foreign id but also make that nullable and we'll go ahead and constrain this as well. So the next thing is going to be a UUID. We want some
00:57
kind of unique identifier to identify this cart and we're going to choose a UUID for that. Now that is pretty much all we need for our cart table. This is just the session which we're going to put the UUID in so the UUID that we generate goes into the Laravel session so we can grab that out when we need it. So let's go ahead and run phpr to migrate and that is our cart table done. So heading
01:22
over to the database we now have our cart table which will automatically be inserted when a user visits the site. A UUID will be generated it won't be attached to a user unless they are signed in and when they do sign in it will be attached to their user automatically. Now what we want to think about is storing variations. So we want to hook up the cart that we have in session to multiple
01:45
variations that have potentially been added. So eight here nine eight or nine. So to do this we're going to go ahead and create a pivot table. So let's just make a migration we don't need a model for this and let's create cart variation table. So let's go ahead and open that up create cart variation table and let's think about what we need to add. So the first one or the first couple are
02:11
pretty obvious we need a foreign id in here that references the cart that we are working with and again we can make that constrained. The second one is going to be the variation id. So again pretty straightforward we want to hook up a cart session with a variation that has been added to the cart. So this is the items that have been added but we also need to know the quantity. We don't want to
02:32
just add these twice into here we want to keep track of the quantity in here which is going to be an integer so we can sum this up multiply it by the product variation price and end up with the cart total. We'll be doing that all inside of the cart class that we're going to be creating as we go and again that is pretty much it. So the database schema here for this is pretty
02:56
straightforward. Let's go ahead and run php artisan migrate and let's just check this out in the database really quickly and there we go. So we land on the site we generate a uuid store that in this session so we can keep that in and throughout the session as the user browses the site. We potentially have a user id remember that's nullable because we can have guests add items to the cart
03:18
and then when they do add an item to the cart that will hook up via the cart id to the variation and it'll apply the quantity that they have chosen. So that is pretty much it. That is our model set up for our cart now what we need to think about is how we're going to create and register the cart service and how we're going to fetch this out.
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!

Episode discussion

No comments, yet. Be the first!