Member Since 8 Months Ago
2,690 experience to go until the next level!
In case you were wondering, you earn Laracasts experience when you:
Earned once you have completed your first Laracasts lesson.
Earned once you have earned your first 1000 experience points.
Earned when you have been with Laracasts for 1 year.
Earned when you have been with Laracasts for 2 years.
Earned when you have been with Laracasts for 3 years.
Earned when you have been with Laracasts for 4 years.
Earned when you have been with Laracasts for 5 years.
Earned when at least one Laracasts series has been fully completed.
Earned after your first post on the Laracasts forum.
Earned once 100 Laracasts lessons have been completed.
Earned once you receive your first "Best Reply" award on the Laracasts forum.
Earned if you are a paying Laracasts subscriber.
Earned if you have a lifetime subscription to Laracasts.
Earned if you share a link to Laracasts on social media. Please email [email protected] with your username and post URL to be awarded this badge.
Earned once you have achieved 500 forum replies.
Earned once your experience points passes 100,000.
Earned once your experience points hits 10,000.
Earned once 1000 Laracasts lessons have been completed.
Earned once your "Best Reply" award count is 100 or more.
Earned once your experience points passes 1 million.
Earned once your experience points ranks in the top 50 of all Laracasts users.
Earned once your experience points ranks in the top 10 of all Laracasts users.
Replied to WhereHas Count Based On Column
Yes it is, thanks. But I am wondering if this syntax even works at all. I think not.
Started a new Conversation WhereHas Count Based On Column
So the idea is this: I have products, for which I have available keys. I want to filter only the orders which have products with enough available keys in them.
The structure is the following: Order -> OrderProduct -> Product -> Keys (The keys have order_product_id which is null if it is available.)
I tried the following:
if ($request->filled('availability')) {
// OrderProduct
$query->whereHas('products', function ($query) use ($request) {
// Product
$query->whereHas('product', function ($query) use ($request) {
if ($request->availability === 'has_available' || $request->availability === 'true') {
// This checks for at least one product that has available keys (called imeis in my DB)
$query->whereHas('imei', function($query) {
$query->whereNull('basket_product_id');
})->where(function($query) {
// This is just a small detail, it doesn't affect what I am trying to do and it seems to work fine
$query->whereHas('categories', function($query) {
$query->where('shop_categories.id', '!=', 1);
})->orDoesntHave('categories');
});
}
});
});
}
BUT whereHas returns all orders with at least one available key.
I want only the orders that have enough available keys for all the products in them.
Also I dont just need 1 available key for each product, I need available keys count based on the product quantity, which is saved in a quantity column in the OrderProduct model.
So if the order product has quantity of 3 I need at least 3 available keys for this product.
So I tried this:
if ($request->filled('availability')) {
$query->whereHas('products', function ($query) use ($request) {
$query->whereHas('product', function ($query) use ($request) {
if ($request->availability === 'has_available' || $request->availability === 'true') {
$query->whereHas('imei', function($query) {
$query->whereNull('basket_product_id');
}, '>=', 'shop_bakset_products.quantity')->where(function($query) {
$query->whereHas('categories', function($query) {
$query->where('shop_categories.id', '!=', 1);
})->orDoesntHave('categories');
});
}
});
});
}
From what I debugged, I don't think it works.
If I can get the value of the column and use is in the whereHas I think it will solve both problems - getting the right count of imeis + getting the right count of products which have them.