Laravel에서 속성(색상, 크기 등)으로 제품을 필터링하는 방법
P粉821274260
2023-08-28 00:17:09
<p>저는 Laravel을 처음 사용하며 특정 제품을 필터링하고 싶습니다. </p>
<p>내 데이터베이스에는 두 개의 테이블이 있습니다. 첫 번째는 <code>products</code> 테이블이고, 두 번째는 <code>attributes</code> 테이블입니다. </p>
<p><strong>제품 목록</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('이름');
$table->string('코드');
$table->integer('status')->default(1);
$table->integer('featured')->default(1);
$table->string('이미지');
$table->longText('short_description');
$table->longText('long_description');
$table->타임스탬프();
})</pre>
<p><strong>상품 속성 테이블</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('크기');
$table->string('색상');
$table->string('가격');
$table->string('재고');
$table->타임스탬프();
})</pre>
<p><strong>관계</strong></p>
<p>하나의 제품에 여러 속성이 있기 때문입니다</p>
<pre class="brush:php;toolbar:false;">class 제품 확장 모델
{
HasFactory를 사용하세요.
공용 함수 속성()
{
return $this->hasmany('AppModelsProductAttributes', 'product_id');
}
}</pre>
<p><strong>내 블레이드 파일</strong></p>
<pre class="brush:php;toolbar:false;"><form action="{{url('/product/filter')}}" method="post">
@csrf
<입력 유형="숨겨진"값="{{$slug}}"이름="슬러그">
<div
class="사용자 정의 제어 사용자 정의 확인란 d-flex align-items-center justify-content-between mb-3">
<입력 이름="color" onchange="javascript:this.form.submit();" type="radio" class="custom-control-input" ;검은색"><label class="custom-control-label" for="검은색>검은색</label>
</div>
<p>컨트롤러에 기능이 있습니다</p>
<pre class="brush:php;toolbar:false;">공용 함수 상점()
{
$filter_products = 제품::with('attributes')->where(['category_id' => $category->id, 'color' => $request->color]);
return view('frontend.shop', Compact('filter_products'));
}</pre>
<p>이 기능을 적용했는데 결과가 나오지 않습니다</p>
<p>프런트엔드 스토어 페이지에서 특정 사이즈나 색상을 기준으로 제품을 필터링하는 방법을 안내해 주세요.
스토어 기능에 어떤 코드가 포함될지. </p>
<p>답장해 주시면 정말 감사하겠습니다</p>
으아악
관계별로 필터링해야 합니다. 설명서를 확인하세요
https://laravel.com/docs/9 .x/eloquent-relationships#querying-relationship-existence
예 WhereHas를 사용하세요
으아악with 어디에도 적용하지 않으면 모든 속성이 반환됩니다
whereHas에 적용된 동일한 필터를 사용하면 이 동작을 방지할 수 있습니다.
으아악