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:
Wo verwenden Sie 'search_data', um nach dem Postanruf zu suchen? – Laerte
@Laerte Ich habe vergessen, meine Controller zu setzen. Ich habe es bereits behoben. Es tut uns leid. –
Wenn Sie 'dd ($ content);' die Ergebnisse sind, was Sie erwarten? – Laerte