Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhabalar benim sorum su sekilde elimde Product Product Attributes ve Variants tabloları var .. bir filtreleme gercekleştirmek istiyorum .. filtreleme formdan gelen value_idlerini içeren varyantların listesi şeklinde olacak ..
product_attributes tablosundan gelmekte bu value idler

yaptıgım sey su
formdan value idler geiyor 1,2,4 sekilnde ;örneğin 1 (30 gram ) 2ise (sarı renk gibi)

aranılan üründe gelen attributelara gore istediğim varyantları nasıl listeleyebilirim

$value_ids=$request->value_ids;
$product_id=$request->product_id;
` $searched_variants=Variant::
with( ['product.attributeValues' => function ($query) use($value_ids){
$query->whereIn('value_id',[$value_ids]);
}]
)->where( 'id',$product_id)->get();

    dd($searched_variants);

`

attribute_values tablosu içerinde attribute_id,product_id,value_id var
product tablosu ise product_id ile varyant tablosuna baglı ..
aldıgığım sonuc ise ya ürüne ait butun varyantları getiriyor yada yanlıs sonuc getiriyor

tesekkür ederim 🙂

(Tabloların yapısı mustafa hocamın forumda verdiği e ticaret tabları mantıgıyla yapıldı)

    Hocam merhabalar whereHas da kullandım ama bu sefer de yanlıs veriyi getiriyor

    whereHas( 'product.attributeValues' , function ($query) use($value_ids){
    $query->whereIn('value_id',[$value_ids]);
    })->where( 'id',$product_id)->get();
    value_id olarak 3 bile yollasam value_id ' si 2 olan sonucu getiriyor her zaman nereyi gozden kacırıyorum
    bu sekilde cagırdıgımda

    100 gr ın orneğin value_id si 3 30 grın ise 1

    Variant::
    whereHas( 'product.attributeValues' , function ($query) use($value_ids){
    $query->whereIn('value_id',[$value_ids]);
    })->where( 'id',$product_id)->get();


            buu sorguda bana value_id =3 bile yollasam value_id =2 olan varyantı dondurmekte value idsi 3 olan varyant kayıtlar arasında yok

    mgsmus
    $searched_variants=Variant::whereHas( 'product.attributeValues' , function ($query) use($value_ids){
    $query->whereIn('value_id',[$value_ids]);
    })->where('product_id',$product_id)->get();
    bu sekilde cagırdıgımda onceki sorgu yanlısmıs dediğim gibi ürüne ait tüm varyantları getiriyor filtreleme yapmadan sebebi ne olabilir

      MehmetMAL having kullanacaksınız:

      ->groupBy('product_id')
      ->havingRaw('COUNT(*) = ?', [count($value_ids)])

        mgsmus
        merhaba hocam su sekilde revize ettim sorguyu ama bu sefer de hiç sonuc getirmiyor

        ` $searched_variants=Variant::select('product_id')->whereHas( 'product.attributeValues' , function ($query) use($value_ids,$product_id){
        $query->whereIn('value_id',[$value_ids]);

            })->where('product_id',$product_id)->groupBy('product_id')
                ->havingRaw('COUNT(*) = ?', [count((array)$value_ids)])
            ->get();
                ;`

          MehmetMAL Şöyle deneyin:

          Variant::whereHas('product.attributeValues' , function ($query) use($value_ids){
                  $query
                      ->whereIn('value_id', [$value_ids])
                      ->groupBy('value_id')
                      ->havingRaw('COUNT(*) = ?', [count($value_ids)])
              })
              ->where( ‘id’,$product_id)
              ->get();

          Lütfen kodlarınızı yapıştırırken dikkat edin ve aşağıdaki konuya bakın:
          https://laravel.gen.tr/d/4903-onemli-forumda-kod-paylasirken-dikkat-edilmesi-gerekenler

          tesekkür ederim hocam dikkat edeceğim 🙂