So filtern Sie Produkte nach Attributen (Farbe, Größe usw.) in Laravel
P粉821274260
2023-08-28 00:17:09
<p>Ich bin neu bei Laravel und möchte bestimmte Produkte herausfiltern. </p>
<p>Ich habe zwei Tabellen in meiner Datenbank, die erste ist die Tabelle <code>products</code> und die zweite ist die Tabelle <code>attributes</code>. </p>
<p><strong>Produktliste</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('name');
$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->timestamps();
})</pre>
<p><strong>Produktattributtabelle</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('size');
$table->string('color');
$table->string('price');
$table->string('stock');
$table->timestamps();
})</pre>
<p><strong>Beziehungen</strong></p>
<p>Weil ich mehrere Attribute für ein einzelnes Produkt habe</p>
<pre class="brush:php;toolbar:false;">class Produkt erweitert Modell
{
benutze HasFactory;
öffentliche Funktionsattribute()
{
return $this->hasmany('AppModelsProductAttributes', 'product_id');
}
}</pre>
<p><strong>Meine Blade-Dateien</strong></p>
<pre class="brush:php;toolbar:false;"><form action="{{url('/product/filter')}}"
@csrf
<input type="hidden"value="{{$slug}}"name="slug">
<div
class="custom-control custom-checkbox d-flex align-items-center justify-content-between mb-3">
"input name="color" onchange="javascript:this.form.submit();" type="radio" ;black"> <label class="custom-control-label" for="black">Black</label>
</div>
</form></pre>
<p>Ich habe eine Funktion in meinem Controller</p>
<pre class="brush:php;toolbar:false;">public function shop()
{
$filter_products = Product::with('attributes')->where(['category_id' => $category->id, 'color' => $request->color]);
return view('frontend.shop', compact('filter_products'));
}</pre>
<p>Ich erhalte keine Ergebnisse, nachdem ich diese Funktion angewendet habe</p>
<p>Bitte zeigen Sie mir auf der Frontend-Store-Seite, wie ich Produkte nach einer bestimmten Größe oder Farbe filtern kann.
und welcher Code in die Store-Funktionalität einbezogen wird. </p>
<p>Bitte antworten Sie mir, ich werde Ihnen vielmals danken</p>
您需要按关系进行过滤,请查看文档
https://laravel.com/docs/9 .x/eloquent-relationships#querying-relationship-existence
举例说明 使用WhereHas
如果 with 中没有应用任何地方,则将返回所有属性
您可以使用在 whereHas 中应用的相同过滤器来防止这种行为