I have a Products
table. An Attributes
table is attached to it, with one to many relation, this means that a product can have many different attributes. I need to filter the request in order to select, for example, all products whose origin is China. My request, it works with single value.
Product::where('price','>',0)
->orderBy('price', "asc")
->with('attributes')
->whereHas('attributes', function(Builder $query){
$query->where('value_name', '=', 'China');
})->get();
I need where the products have China
and Gray
attributes together
If there is only one parameter, then it works, but there can be a dynamic number of parameters and it is necessary to select only those products whose attributes will have, for example, the origin of China and the color Gray. But this query returns an empty result.
$products = Product::where('price', '>', 0)
->orderBy('price', "asc")
->with('attributes')
->whereHas('attributes', function(Builder $query){
$query->where('value_name','=' , 'China')
->where('value_name','=' , 'Grey');
})
->get();
part table Attributes bellow.
---- -------------------------------------- ---------------- -------------------------------------- ------------ ---------
| id | attribute_guid | attribute_name | value_guid | value_name | item_id |
---- -------------------------------------- ---------------- -------------------------------------- ------------ ---------
| 1 | 84c01488-bf53-11e9-80e3-00155dbf5a2a | Orign | e4a32025-24d2-11eb-bf54-00505600fc59 | China | 1 |
| 2 | 9790984e-1103-11ea-b773-b42e9983820e | Color | 8acbe31e-ddfa-11ea-bf53-00505600fc59 | Grey | 1 |
---- -------------------------------------- ---------------- -------------------------------------- ------------ ---------
CodePudding user response:
The second where
method is the same as a AND WHERE
on an SQL query. You'll need to use the $query->where('value_name, 'China')->orWhere('value_name', 'Grey');
or use the $query->whereIn('value_name', ['China', 'Grey'])
.
https://laravel.com/docs/9.x/queries#or-where-clauses - orWhere
https://laravel.com/docs/9.x/queries#additional-where-clauses - additional where
clauses