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
61. Attaching orders for registering guest users

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
The current state of our orders table has two orders by a user just here who doesn't have an account because the user ID hasn't been associated
00:10
and one user who was signed in and it's been associated. So our goal now is when we are over on that order confirmation page or even if we just hit register at a later date, if the email matches that order,
00:24
we're going to go ahead and associate the orders with that user. Now we have to be really careful here because technically if I go and check out with an email address and someone else signs up with that email address within Laravel by default, particularly with Laravel Fortify,
00:42
we are already signed in. So we will automatically be signed in. Particularly with Laravel Breeze, we're automatically signed in once we've registered. So what I would recommend we do, and we can do this a little bit later on,
00:53
is taking advantage of verifying our email address. So what we would do is register, receive an email, verify that we actually own that email address before we start to attach any orders. So we'll look at that later, but we'll get this base functionality working first of all.
01:10
So the goal is I'm going to register with the email of mable at codecourse.com and that should hook up them two orders to my account. So let's start out by going over to our event service provider. Now when we register over in the registered user controller just here,
01:30
this will fire an event for us, this registered event. And of course, as we've already seen, log the user in. So what we want to do is tap into this and create a new listener in here to this registered event and attach some orders.
01:46
So let's go ahead and say attach orders class. Now the reason I'm defining this out here first of all is within Laravel rather than having to say make listener, what we can actually do is say event generate.
01:59
And that's going to go ahead and look at any of the listeners that you defined here that don't already exist and it will create them for you. So let's go ahead and run that. And you can see that events and listeners have been generated successfully.
02:11
So if we go ahead and look for this attach orders, what you'll actually notice is it's within app and providers. That is just because we didn't define a namespace to this and that's been created at the namespace that we define this,
02:23
which is within app providers. So just be careful with this. Let's go over and delete attach orders from providers. And then within our event service provider,
02:33
we'll actually go ahead and namespace this manually at the top. So use app and this is going to be in listeners and attach orders like so. So now when we rerun this event generate command, if we go over to attach orders, that is now in app and listeners.
02:54
If we just head over here, there we go. Great. Okay. So within attach orders, what kind of information do we need to use inside of here?
03:04
Well, we've got this registered event. Let's just die dump on this event here and just see what information we get. Now, of course, what we're going to have to do is actually go through and register. So let's just create an account out in here.
03:16
And let's create Mabel and just see what we get. We'll just delete this from the database as we go. So let's create this out in here and register. And there we go.
03:27
So we get this registered event and we get this public user property on here. You can check this out by actually going over to the registered event. So let's find that under auth events that's in the base framework. And you can see that into the constructor, sure enough, we get the user.
03:41
And that's pretty much all of the information that we need. So let's head over to the database. Just delete that user because that's, of course, the user that we want to attach them orders to. So eventually, these will be set to that user's ID.
03:52
And let's just go ahead and do this in a kind of roundabout way, maybe creating a couple more queries than we need to. But let's go ahead and say where email is event user, which is that property that we've just seen in email.
04:05
We're going to go ahead and get all of them orders. So basically grab all the orders where that email matches. And then we're going to go through and just use the each method on a Laravel collection. And for each of them orders, we want to attach that order to that user.
04:20
So let's go ahead and bring our event into scope. And let's say order user associate and event user. That's going to be the user that's just been created. And then let's go ahead and say order and save.
04:37
So there are ways to do this with just one query. But let's leave this as it is for now. Get it working. And we can always refactor it later.
04:44
OK, let's see what happens when we now register with that user. So let's go ahead and create an account under Mabel with that email address. Choose a password. Hit register.
04:59
We're signed in automatically. If we can now come over, you can see that them two orders have been associated. That now means that when we create our orders page that we'll be able to click on from this dropdown, the user will see them two orders that they created earlier as a guest.
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!