J'ai créé un formulaire de recherche, mais j'ai besoin d'aide dans la façon d'interroger les données et les résultats:requêtes multiples options attributs
Fondamentalement, j'ai une liste de produits, et il y a un product_type
dans chaque produit et Chaque produit peut également avoir de nombreux attributs de matériaux.
J'ai déjà fait la requête pour obtenir le type de produits, et c'est facile puisque le product type id
est dans la même table (produits) mais que je dois filtrer les produits avec les matériaux (attributs) sélectionnés par l'utilisateur.
Mon contrôleur:
public function searchResults(Request $request)
{
if($request->has('type')){
$type = $request->type;
}
if($request->has('material')){
$material = $request->material;
}
$query = \DB::table('products');
//only one type
if ($request->has('type') && $type) {
$query->where('product_type_id', $type);
}
// multiple values
if ($request->has('material') && $material) {
//create query to get all the products with the materials selected
// the materials request comes in a array of ids ([1,2,3])..
}
$products = $query->get();
return view('catalogs.index',compact('products'));
}
}
Modèle de produit:
class Product extends Model
{
public function photos()
{
return $this->hasMany(ProductImage::class, 'product_id','id');
}
public function businessAreaName()
{
return $this->hasOne(ProductBusinessarea::class,'id','product_businessarea_id');
}
public function typeName()
{
return $this->hasOne(ProductType::class,'id','product_type_id');
}
public function businessAttributes()
{
return $this->hasMany(ProductAttributeBusinessarea::class);
}
public function materialAttributes()
{
return $this->hasMany(ProductAttributeMaterial::class);
}
public function areas(){
return $this->belongsToMany(ProductAttributeBusinessarea::class);
}
public function materials(){
return $this->belongsToMany(ProductAttributeMaterial::class);
}
}
BASE DE DONNÉES:
produits
- id
- Nom
- type_id
product_attribute_materials
- Product_ID
- product_material_id
product_materials
- id
- Nom
Comment puis-je combiner la requête pour obtenir tous les produits avec les matériaux choisis?
Pouvez-vous ajouter votre modèle Eloquent à ses relations? – OuailB
oui je crois que je peux, mais comment je ferais cette combinaison? Je dois passer les paramètres des matériaux, comment je ferais dans le modèle de produit? –
@OuailB signifie que vous pouvez montrer votre code de modèle Eloquent et l'ajouter à la question !! – Maraboc