>  Q&A  >  본문

Laravel에서 속성(색상, 크기 등)으로 제품을 필터링하는 방법

<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>
P粉821274260P粉821274260441일 전582

모든 응답(2)나는 대답할 것이다

  • P粉908138620

    P粉9081386202023-08-28 15:59:41

    으아악

    회신하다
    0
  • P粉033429162

    P粉0334291622023-08-28 13:52:36

    관계별로 필터링해야 합니다. 설명서를 확인하세요

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

    예 WhereHas를 사용하세요

    으아악

    with 어디에도 적용하지 않으면 모든 속성이 반환됩니다

    whereHas에 적용된 동일한 필터를 사용하면 이 동작을 방지할 수 있습니다.

    으아악

    회신하다
    0
  • 취소회신하다