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
64. Returning the order status

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're now going to figure out how to best return the order status. Now, at first glance, looking at the database, this seems like it would be pretty easy.
00:09
If we had packageDat, for example, for this order set to the current date and time, we would assume that this is packageDat. But to be able to actually grab that and say, well,
00:21
is it packageDat? We would have to check placeDat and shipDat as well. If shipDat was filled, then it wouldn't be packageDat. It would be shipDat.
00:30
So essentially, what we want in our model is a really nice, simple method that we can use to get the latest filled status. Now, you could have 10 of these statuses if you wanted to.
00:42
This method is going to work in exactly the same way. It's basically going to check the latest filled column here. And that will be the status of the order. So let's leave packageDat in here.
00:54
And let's, for another order here, fill in both of these, shipDat as well. And that should give us enough to test in our UI. OK, so if we come over to our order,
01:05
effectively what we want, let's just do this at the top here, is a method that's going to return the status to us. Now, to be able to keep track of all of the statuses, let's just create out a statuses array in here
01:22
with all of the columns that we have. And that's pretty much just these three timestamps. What this allows us to do is iterate through each one, filter out the ones that are null,
01:32
and get the latest one that's been filled. So to do this within this status method, we'll treat this as a Laravel collection. So we'll go ahead and collect up the status columns
01:43
that we have, so statuses. And then we're going to go ahead and grab the last item with a condition. Now, last on its own is just going to return the last one.
01:54
So let's come over to here, go over to the order status bit, and we'll just go ahead and say order status. Now, if we did that for each one, we'd get shipped out, because that's
02:06
the last column in that list. In order, that's not what you want. We want a condition in here. So let's use a shorthand closure,
02:13
grabbing the status column for each of these. And we can use this handy filled method within Laravel to check that this has been filled. What we can then do is dynamically
02:24
call the status column, and check if that's been filled, and grab the last one that has been filled. That's pretty much what we just explained and how we wanted that to work.
02:35
So let's head over and give that a refresh. And you can see that these two have been placed at, this one has been shipped, and this one has been packaged. It's now a really handy way to just,
02:44
without doing too much logic in our templates, go ahead and grab the last status. Now, we still need to figure out how to output the actual text version of this,
02:54
because at the moment, we're just grabbing the column. And for now, what we're going to do is just put a bunch of if statements in here. Later on, we can refactor this to a presenter, which
03:04
will allow us to just call one method and grab back the text representation of that status. So we'll move this later, but now it's a lot easier to just create three completely independent if statements
03:16
to check the order status and check if it is, for example, placed at. And if it is placed at, we can go ahead and say, order placed. And we can do this for each of these.
03:34
So if it has been packaged at, order packaged and shipped at and order shipped. And of course, inside of here, you also have access to the shipped at column, which
03:55
is a timestamp to date times string. Now, at the moment, that's not going to work, because we've not set this up as a actual carbon object over in our order model.
04:05
But if you wanted to do that, we could go ahead and add in a cast. So let's go ahead and say protected casts. And we can pretty much grab all of these.
04:18
And we can cast them to date times. So let's go ahead and do that for each of these. And if we come over, there we go. So you could technically output that information
04:30
as well if you wanted to. I'm going to remove that from the template and let you decide. But we now have the correct status for each of our orders.
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!