2017-05-04 59 views
2

我創建了一個應用程序來過濾數據。在索引內部,我製作了一個過濾器,按照說明,模型,狀態,庫存和類別過濾產品。 我的類別是通過erp_categoy表組織的,並且通過​​(接收產品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); 
     } 

什麼建議嗎?

+0

你在哪裏使用'search_data'搜索後通話? – Laerte

+0

@Laerte我忘了把我的控制器。我已經修好了。抱歉。 –

+0

如果你是'dd($ content);'結果是你所期望的? – Laerte

回答

1

試圖改變你的代碼是這樣的:

$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); 
} 

然後在視圖:

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

當你調用whereIn或類似這樣的東西在控制器中的問題一定要發生的事情。可能你不需要再次查詢Produto。

第二件事是你沒有在視圖中使用結果。你在調用關係函數。

試試這個,並檢查它是否有幫助...

+0

它仍然給出了同樣的錯誤,我已經創建了類似的問題,但我仍然無法解決它,從我所看到的你也是巴西人,我不想利用,但會你有Skype或什麼?我有點絕望,因爲這個錯誤 –

+0

讓我們聊聊吧 – Laerte