Comment filtrer les produits par attributs (couleur, taille, etc.) dans Laravel
P粉821274260
2023-08-28 00:17:09
<p>Je suis nouveau sur Laravel et je souhaite filtrer des produits spécifiques. </p>
<p>J'ai deux tables dans ma base de données, la première est la table <code>products</code> et la seconde est la table <code>attributs</code>. </p>
<p><strong>Liste de produits</strong></p>
<pre class="brush:php;toolbar:false;">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();
})</pré>
<p><strong>Tableau des attributs du produit</strong></p>
<pre class="brush:php;toolbar:false;">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();
})</pré>
<p><strong>Relation</strong></p>
<p>Parce que j'ai plusieurs attributs pour un seul produit</p>
<pre class="brush:php;toolbar:false;">class Le produit étend le modèle
{
utilisez HasFactory ;
attributs de fonction publique()
{
return $this->hasmany('AppModelsProductAttributes', 'product_id');
}
}</pré>
<p><strong>Mes fichiers Blade</strong></p>
<pre class="brush:php;toolbar:false;"><form action="{{url('/product/filter')}}" method="post">
@csrf
<input type="hidden"value="{{$slug}}"name="slug">
<div
class = "contrôle personnalisé case à cocher personnalisée d-flex align-items-center justifier-contenu-entre mb-3">
<nom d'entrée="couleur" onchange="javascript:this.form.submit();" type="radio" class="custom-control-input" id="noir" valeur=" ;noir"> <classe d'étiquette="étiquette de contrôle personnalisée" pour="noir">Noir</étiquette>
</div>
</form></pre>
<p>J'ai une fonction dans mon contrôleur</p>
<pre class="brush:php;toolbar:false;">boutique de fonctions publiques()
{
$filter_products = Product::with('attributes')->where(['category_id' => $category->id, 'color' => $request->color]);
return view('frontend.shop', compact('filter_products'));
}</pré>
<p>Je n'obtiens aucun résultat après avoir appliqué cette fonction</p>
<p>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. </p>
<p>Veuillez me répondre, je vous remercierai beaucoup</p>
Vous devez filtrer par relation, veuillez consulter la documentation
https://laravel.com/docs/9 .x/eloquent-relationships#querying-relationship-existence
Exemples Utilisez WhereHas
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