2017-05-04 4 views
2

Ich habe eine Anwendung zum Filtern von Daten erstellt. Innerhalb des Index habe ich einen Filter gemacht, um Produkte nach Beschreibung, Modell, Status, Lagerbestand und Kategorie zu filtern. Meine Kategorie ist durch die erp_categoy Tabelle organisiert und die Beziehung mit dem Produkt erfolgt über erp_product_category (Produkt ID + Category ID erhalten). Ich habe eine BelongsToMany Beziehung im Model: Product, Category und ProductCategory erstellt.Wie filtere ich eine goesToMany-Beziehung? Laravel 5.4

Produkt-Modell

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

Kategorie Model

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

product_category Modell

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

In meinem Index Ich habe eine Auswahl erstellt, die alle Kategorien der Tabelle 'erp_category' auflistet.

<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> 

Ich habe mein JavaScript erweitert und die Werte in einer Sitzung 'Kategorie' gespeichert.

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

    </script> 

Und dann habe ich die Forschung durch JS.

Ich erwartete die Produkt-Tabelle (Tabelle ich erstellte, um die Werte zurückzugeben). Ich liste meine Produkte über die von select eingegebene Kategorie auf, gibt aber die ursprüngliche Liste des Indexes zurück.

Produkt-Tisch

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

-Controller

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

Jeder Vorschlag?

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

Und dann die Ansicht:

+0

Wo verwenden Sie 'search_data', um nach dem Postanruf zu suchen? – Laerte

+0

@Laerte Ich habe vergessen, meine Controller zu setzen. Ich habe es bereits behoben. Es tut uns leid. –

+0

Wenn Sie 'dd ($ content);' die Ergebnisse sind, was Sie erwarten? – Laerte

Antwort

1

Versuchen Sie Ihren Code, so etwas ändern

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

Das Problem in der Steuerung geschieht müssen, wenn Sie whereIn oder so etwas wie dies nennen. Wahrscheinlich müssen Sie Produto nicht erneut abfragen.

Die zweite Sache ist, dass Sie nicht die Ergebnisse in der Ansicht verwenden. Sie rufen die Beziehungsfunktion auf.

Versuchen Sie dies und überprüfen Sie, ob es hilft ...

+0

Es gibt immer noch den gleichen Fehler, ich habe bereits ähnliche Fragen gestellt, und ich kann es immer noch nicht lösen.Was ich gesehen habe, bist du auch Brasilianer, ich möchte keinen Vorteil ausnutzen, würde es aber tun Sie haben Skype oder etwas? Ich bin ein bisschen verzweifelt mit diesem Fehler. –

+0

Lassen Sie uns im Chat sprechen – Laerte