Comment filtrer les produits par attributs (couleur, taille, etc.) dans Laravel
P粉821274260
P粉821274260 2023-08-28 00:17:09
0
2
528

Je suis nouveau sur Laravel et je souhaite filtrer des produits spécifiques.

J'ai deux tables dans ma base de données, la première est la table products et la seconde est la table attributs.

Liste de produits

Schema::create('products', function (Blueprint $table) { $table->bigIncrements('id'); $table->BigInteger('category_id')->unsigned()->nullable(); $table->string('nom'); $table->string('code'); $table->integer('status')->default(1); $table->integer('featured')->default(1); $table->string('image'); $table->longText('short_description'); $table->longText('long_description'); $table->horodatages(); }) 

Tableau des attributs du produit

Schema::create('product_attributes', function (Blueprint $table) {. $table->bigIncrements('id'); $table->unsignedBigInteger('product_id'); $table->string('sku'); $table->string('taille'); $table->string('couleur'); $table->string('prix'); $table->string('stock'); $table->horodatages(); }) 

Relation

Parce que j'ai plusieurs attributs pour un seul produit

class Le produit étend le modèle { utilisez HasFactory ; attributs de fonction publique() { return $this->hasmany('AppModelsProductAttributes', 'product_id'); } } 

Mes fichiers Blade

@csrf
Noir

J'ai une fonction dans mon contrôleur

boutique de fonctions publiques() { $filter_products = Product::with('attributes')->where(['category_id' => $category->id, 'color' => $request->color]); return view('frontend.shop', compact('filter_products')); } 

Je n'obtiens aucun résultat après avoir appliqué cette fonction

Veuillez me guider sur la manière de filtrer les produits en fonction d'une taille ou d'une couleur spécifique sur la page frontale du magasin. et quel code sera inclus dans la fonctionnalité du magasin.

Veuillez me répondre, je vous remercierai beaucoup

P粉821274260
P粉821274260

répondre à tous (2)
P粉908138620
$brands = Brand::orderBy('id','DESC')->get(); $colors = Color::orderBy('id','DESC')->get(); $sizes = Size::orderBy('id','DESC')->get(); $weights = Weight::orderBy('id','DESC')->get(); $tags = Tag::orderBy('id','DESC')->get(); try{ if (!empty($_GET['colors']) || !empty($_GET['brands']) || !empty($_GET['sizes']) || !empty($_GET['weights']) || !empty($_GET['tags'])) { $products = Product::where( function($query ){ $query->when(!empty(request()->colors) ,function($subquery){ $subquery->whereHas('colors', function($subquery) { $subquery->whereIn('colors.id',request()->colors); }); })->when(!empty(request()->sizes) ,function($subquery){ $subquery->whereHas('sizes', function($subquery) { $subquery->whereIn('sizes.id',request()->sizes); }); })->when(!empty(request()->weights) ,function($subquery){ $subquery->whereHas('weights', function($subquery) { $subquery->whereIn('weights.id',request()->weights); }); })->when(!empty(request()->tags) ,function($subquery){ $subquery->whereHas('tags', function($subquery) { $subquery->whereIn('tags.id',request()->tags); }); })->when(!empty(request()->brands) ,function($subquery){ $subquery->whereHas('brand', function($subquery) { $subquery->whereIn('brand_id',request()->brands); }); })->when(!empty(request()->is_new) ,function($subquery){ $subquery->where('is_new',request()->is_new); })->when(!empty(request()->gender) ,function($subquery){ $subquery->where('gender', 'LIKE', "%" . request()->gender . "%"); }); })->paginate(10); return view('front.shop',compact('products','brands','colors','sizes','weights','tags')); } else { return redirect()->route('products'); } } catch (\Exception $e) { toastr()->error(trans('Some thing is wrong please try again')); return redirect()->route('products'); }
    P粉033429162

    Vous devez filtrer par relation, veuillez consulter la documentation

    https://laravel.com/docs/9 .x/eloquent-relationships#querying-relationship-existence

    Exemples Utilisez WhereHas

    $filter_products = Product::with('attributes') ->where(['category_id' => $category->id]) ->whereHas('attributes',function($query) use($request){ $query->where(['color' => $request->color]); });

    Si appliqué nulle part, toutes les propriétés seront restituées

    Vous pouvez empêcher ce comportement en utilisant le même filtre appliqué dans WhereHas

    $filter_products = Product::with(['attributes'=>function($query) use($request){ $query->where(['color' => $request->color]); }]) ->where(['category_id' => $category->id]) ->whereHas('attributes',function($query) use($request){ $query->where(['color' => $request->color]); });
      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!