Merhabalar, @mgsmus hocamın https://laravel.gen.tr/d/3176-urun-ve-urun-detay-tablolarinin-olusumu/36 konudaki varyasyon sistemi mantığı ile sistemi oluşturdum ancak kategori filtreleme işleminde takıldığım bir nokta oldu. İlgili kodları buraya yazıyorum, yaklaşık 1 haftadır ara ara bakıp farklı yöntemler denesemde işin içinden çıkamayınca buraya başvurmak zorunda kaldım. Rahatsızlık için kusura bakmayın belki basit bir durum ama çok yöntem denedim yapamadım.
kategori filtrede url yapısı:
http://localhost:8888/xxx/public/test-kategorisi?filtre=1&renk=5|2&beden=19|3
Controller içinde url yapısını düzenleme ve yönlendirme kodu
if(request()->has('_token')){
$url = "";
if (strpos(url()->previous(), "filtre") !== false) {
$url = url()->previous()."&".$_GET["name"]."=".$_GET["value"];
}else{
$url = url()->current()."?filtre=1&".$_GET["name"]."=".$_GET["value"];
}
return response()->json($url);
}
Model içindeki filtre işleme kodu
`foreach ($GET as $get_key => $item_get) {
if( $get_key!="fiyat" ){
$resp = explode("|", $item_get);
$GET["options_id"] = $resp[1]; // $resp[1] pivottaki options_id
$_GET["value_id"] = $resp[0]; // $resp[0] pivottaki value_id
$whereInOptions[] = $resp[1]; $whereInValues[] = $resp[0];
//$result->where( ['product_options_pivot.options_id' => strip_tags($_GET["options_id"]), 'product_options_pivot.value_id' => strip_tags($_GET["value_id"]) ] );
$result->whereIn( 'product_options_pivot.options_id', [ implode(",", $whereInOptions) ] ); $result->whereIn( 'product_options_pivot.value_id', [ implode(",", $whereInValues) ] );
}
unset($_GET["options_id"]); unset($_GET["value_id"]);
}`
Son olarak SQL çıktısı bu şekilde;
select product.*, product_variation.id as pro_var_id, product_variation.title as pro_var_title, product_variation.slug as pro_var_slug, product_variation.sku as pro_var_sku, product_variation.price as pro_var_price, product_variation.stock as pro_var_stock from product_category_pivot inner join product on product.id = product_category_pivot.product_id inner join product_variation on product_variation.product_id = product_category_pivot.product_id inner join product_options_pivot on product_options_pivot.product_id = product_category_pivot.product_id where (product_category_pivot.category_id = 27 and product_variation.show_primary = 1 and product.deleted_at is null and product.publish = 0) and (product_options_pivot.options_id = 2 and product_options_pivot.value_id = 5) and (product_options_pivot.options_id = 3 and product_options_pivot.value_id = 19);
`
tek olarak örneğin beden seçtiğimde sorunsuz getiriyor ama bedenden sonra diğer varyasyonları seçtikçe where kullandığımda 0 ürün, whereIn kullandığımda da bir önceki seçimdeki kadar veri getiriyor. Yardımcı olabilirseniz çok sevinirim şimdiden teşekkür ederim.