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.