2017-05-04 2 views
2

데이터를 필터링 할 응용 프로그램을 만들었습니다. 인덱스 내부에서 설명, 모델, 상태, 주식 및 카테고리별로 제품을 필터링하는 필터를 만들었습니다. 내 카테고리는 erp_categoy 테이블을 통해 구성되며 제품과의 관계는 erp_product_category (수신 제품 ID + 카테고리 ID)을 통해 이루어집니다. Model : Product, Category 및 ProductCategory에서 BelongsToMany 관계를 만들었습니다.belongsToMany 관계를 필터링하는 방법은 무엇입니까? Laravel 5.4

제품 모델

public function category() 
    { 
     return $this->belongsToMany('App\Category', 'erp_product_category', 'erp_productid', 'erp_categoryid'); 
    } 

분류 모델 내 인덱스에서

public function product() 
    { 
     return $this->belongsToMany('App\Product','erp_product_category', 'erp_categoryid', 'erp_productid'); 
    } 

PRODUCT_CATEGORY 모델

public function product() 
    { 
     return $this->belongsTo('App\Models\Product', 'erp_categoryid', 'erp_categoryid'); 
    } 

'erp_category'테이블의 모든 범주를 나열하는 선택 목록을 만들었습니다.

<select id="categoria" name="categoria" class="form-control" style="width: 150px;"> 
           @foreach($cat as $categoria) 
            <option value="{{$categoria->erp_categoryid}}" @if($categoria->erp_categoryid === session('categoria')) selected @endif >{{$categoria->erp_name}}</option> 
           @endforeach 
          </select> 

저는 JavaScript를 확장하고 세션 '카테고리'에 값을 저장했습니다.

<script src="{{ asset('assets/js/ProductSearch.js') }}"></script> 
    <script> 
     var postSearch = '{{ route('product::searchPost') }}'; 
     var searchRequest = { 
      'categoria' :'{{session('categoria')}}', 
     }; 

    </script> 

그런 다음 JS를 통해 조사했습니다.

$(document).on('blur', '#categoria', function(){ 
     var categoria = $('#categoria').val(); 
     searchRequest['categoria'] = categoria; 
     doSearch(); 
    }); 

function doSearch() { 
    $.post(postSearch, { 
      'search_data': JSON.stringify(searchRequest), 
      '_token': $('meta[name=csrf-token]').attr('content'), 
     } 
     , function(data) { 
      $('#product-table').html(data); 
     }); 
} 

제품 테이블 (값을 반환하기 위해 만든 테이블)이 필요합니다. select를 통해 입력 한 카테고리를 통해 내 제품을 나열하지만 인덱스의 초기 목록을 반환합니다.

제품 테이블

<td> 
    @foreach($prod->category as $categoria) 
    {{$categoria->erp_name}} 
    @endforeach 
</td> 

컨트롤러

public function search(Request $request) 
{  
$product = Product::query(); 
$categoria = Category::query(); 
if ($request->isMethod('post')) 
{ 
$data = json_decode($request->search_data); 
$categoria; 
$categoria = $data->categoria; 
session(['categoria' => $categoria]); 
if(strlen(session('categoria')) > 0) 
{ 
$product_ids = Product::whereHas('category', function ($query){ 
    $query->where('erp_category.erp_categoryid', '=', session('categoria')); 
    })->get(); 
    $ids = []; 

      foreach($product_ids as $product_data) 
      { 
       $ids[] = $product_data->erp_productid; 
      } 

      $product = $product->whereIn('erp_category.erp_categoryid', $ids); 
     } 
     $content = $product->paginate(10); 
     $cat = Category::all(); 

     if ($request->isMethod('post')) 
     { 
      return view('admin.product-table')->with('product', $content)->with('cat',$cat); 
     } else 
     { 
      return view('admin/product')->with('product', $content)->with('cat',$cat); 
     } 

어떤 제안? 다음 뷰

$content = null; 
if(strlen(session('categoria')) > 0) { 
    $product_ids = Product::whereHas('category', function ($query){ 
     $query->where('erp_category.erp_categoryid', '=', session('categoria')); 
    }); 
    $content = $product_ids->paginate(10); 
    $cat = Category::all(); 
} 

if ($request->isMethod('post')) { 
    return view('admin.product-table')->with('product', $content)->with('cat',$cat); 
} else { 
    return view('admin/product')->with('product', $content)->with('cat',$cat); 
} 

을 그리고 :이 같은 whereIn 또는 뭔가를 호출 할 때 컨트롤러에 문제가 발생해야

@if ($product !== null) 
    @foreach($product as $p) 
     <td> 
      @foreach($p->category as $categoria) 
       {{$categoria->erp_name}} 
      @endforeach 
     </td> 
    @endforeach 
@endif 

+0

게시물 통화 후 어디에서 검색하려면 search_data를 사용하고 있습니까? – Laerte

+0

@Laerte 컨트롤러를 놓는 것을 잊어 버렸습니다. 나는 이미 그것을 고쳤다. 죄송합니다. –

+0

'dd ($ content);'결과가 예상 한 결과입니까? – Laerte

답변

1

봅니다 이런 식으로 코드를 변경합니다. Produto에 다시 쿼리 할 필요가 없을 것입니다.

둘째,보기에서 결과를 사용하지 않는 것입니다. 관계 함수를 호출하고 있습니다.

시도해보고 도움이되는지 확인하십시오 ...

+0

여전히 같은 오류가 발생합니다. 비슷한 질문을 만들었지 만 해결할 수 없습니다. 내가 본 것 중에 브라질도 마찬가지입니다. 활용하고 싶지는 않을 것입니다. 너는이 실수로 필사적이다. –

+0

채팅으로 이야기하자. – Laerte

관련 문제