Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • Yardım
  • E-ticaret Ürün Detay Sayfasında Ürün Özellikleri Gösterimi Sorunu

Tablo altında belirtmiştim üstat ama. gözden kaçtı sanırım...
Tablo yapılarım bu şekilde. Ürünlerimi listelerken renklerine göre listeliyorum. Yani kaç çeşit renk tanımlanmışsa o kadar varyantlı ürünüm gözüküyor. Ürünleri varyant_id ye göre ürün detay sayfasına gönderiyorum. Ürün özelliklerini gösterirken product_attributes tablosundaki renk ve beden altına tüm value_id name verileri geliyor.

mgsmus
Tablo altında belirtmiştim üstat ama. gözden kaçtı sanırım…
Tablo yapılarım bu şekilde. Ürünlerimi listelerken renklerine göre listeliyorum. Yani kaç çeşit renk tanımlanmışsa o kadar varyantlı ürünüm gözüküyor. Ürünleri varyant_id ye göre ürün detay sayfasına gönderiyorum. Ürün özelliklerini gösterirken product_attributes tablosundaki renk ve beden altına tüm value_id name verileri geliyor.

    #product_attributes pivot Modelim

    class ProductAttributesModel  extends Pivot
    {
        protected $table = "product_attributes";
        public $timestamps = false;
        
        public function product()
        {
            return $this->belongsTo(ProductModel::class);
        }
    
        public function attribute()
        {
            return $this->belongsTo(AttributesModel::class);
        }
    
        public function attributeValue()
        {
            return $this->belongsTo(AttributeValuesModel::class);
        }
    
        public function variant()
        {
            return $this->belongsTo(VariantsModel::class);
        }
    }

      SerkanMUTU

      SerkanMUTU Ürün özelliklerini gösterirken product_attributes tablosundaki renk ve beden altına tüm value_id name verileri geliyor.

      Hatalı olduğunu düşündüğünüz yer burası mı? Gelmemesi mi gerekiyor? Ne gelmesini bekliyorsunuz?

        mgsmus
        sadece o ürüne ait olanların gelmesi gerekirken ekli olan tüm ürünlerin attribute value leri geliyor. 2 numaralı urun detayı için Renk : Mavi ve Beden : M gelmesi gereken. Fakat renk kısmında kırmızı ve mavi beden kırmızıda S ve M beden olarak geliyor. farklı bir ürün daha eklediğimde Renk: Yeşil Beden: XL buson eklenen özelliklerde diğer ürüne ekleniyor.

          SerkanMUTU Şöyle deneyebilirsiniz:

          $variant = VariantsModel::with([
                  'attributes.attributeValues' => function($query) use ($id) {
                      $query->wherePivot('variant_id', $id)
                  }
              ])
              ->findOrFail($id);

            mgsmus
            Teşekkür ederim üstat emeğine sağlık.

            mgsmus Bu sorguya gore with içerisinde groupby kullanamıyormuyuz. şöyleki $query->wherePivot('variant_id', $id)->groupBy('value_id') gibi. iki defa kırmızı yada iki defa S beden gelmemesi için. with içerisinde groupby kullanamıyorsam model içinde mi groupby yapmam lazım. teşekkür ederim.

              • mgsmus

                Seviye 1382
              • Düzenlendi

              SerkanMUTU Elde ettiğiniz sonuç üzerinde uygulayabilirsiniz:

              $variant->attributes
                  ->transform(function($attribute) {
                      $attribute->attributeValues = $attribute->attributeValues
                          ->groupBy('value_id');
              
                      return $attribute;
                  });

              Birçok yolu var. Bunları yapmadan SQL ile de yapılabilir, söz vermiyorum ama boş zamanımda bir şeyler hazırlarım belki.

                mgsmus teşekkür ederim üstat eline emeğine sağlık.

                4 gün sonra

                mgsmus Tekrar merhaba üstat. Öğrenmeye başladığım laravel yolculuğunda yeni yeni birçok şey öğrendim. Bu öğrenme sürecinde laravel.gen.tr deki konuları araştırıyorum. Bunun yanında laravel dökümanları da cok cok işime yarıyor. Ayrıca github repolarınızıda inceledim. Sınırsız kategori olayını hallettim, kategoriye gore urunlerimi getirebiliyorum, ürünün birden fazla fotografı varsa bunları ayrı ayrı getirebiliyorum. Üyelik sistemimi ayarladım. vs vs.

                yapamadıklarım
                Ürün detay sayfamda ürüne ait beden ve renk seçeneklerini sayende düzgün bir şekilde getiriyorum. fakat yapamadığım iki şey var.
                Birincisi sıkıntım
                Ürün detay sayfasındaki ilgili ürünün beden ve renk seçeneklerindeki değerlerin seçili gelmesi. ( Ürünüm Small Kırmızı ise beden ve renk seçeneklerindeki S ve Kırmızı seçili gelsin istiyorum.)
                İkinci Sıkıntım
                Beden ve renk özelliğindeki değerlere stok bilgisi aktarmam gerekiyor. ürün detay sayfasına gelindiğinde varsayıyorum (small kırmızı ürün) S ve Kırmızı seçili iken Medium seçeneğinin stok sıfır ise bunun tıklanılabilir olmasını engellemek istiyorum.

                stok tablom
                product_stock
                shop_id | product_id | variant_id | stock | price

                Ürün detay sayfasındaki ürün özellikleri döngüm

                @php
                        $data = [];
                    foreach ($options as $attribute){
                            $data[$attribute->name] = [$attribute->attributeValues->pluck('name')];
                    }
                
                    foreach ($data as $key => $value){
                        <p class='fw-bold m-0 my-2'>{{ $key }}</p>
                        foreach ($value as $val){
                            <span class="me-2 border p-1 px-2 rounded">
                                {{ $val }}
                            </span>
                        }
                    }
                @endphp

                Bu konu dışında fikrini almak istedigim bir konu var. cevaplamak isterseniz fikriniz benim için önemli.
                ürün indirimlerim için indirim ve indirim detay tabloları olusturup buradan mı indirim yapmalıyım. yoksa genel olarak komple kampanya yönetimi gerekli tablolarımı olusturup bu yapı ilemi indirim tanımlamalıyım.
                Teşekkürler

                  SerkanMUTU Ürün detay kısmında ürüne, varyantlarına ve özelliklerine sahipsiniz. Bu istediklerinizi yapabiliyor olmanız lazım:

                  @foreach($özellikler as $özellik)
                      {{ $ozellik->name }} 
                      @if($varyant->ozellikler->contains($ozellik))
                          Seçili
                      @endif
                  @endforeach

                  Kampanya konusunda bir şey söylemek zor. Daha önce tam kapsamlı bir kampanya sistemi hazırlamaya çalıştım, pek kolay geçtiğini söyleyemem.

                  SerkanMUTU İkinci Sıkıntım
                  Beden ve renk özelliğindeki değerlere stok bilgisi aktarmam gerekiyor. ürün detay sayfasına gelindiğinde varsayıyorum (small kırmızı ürün) S ve Kırmızı seçili iken stok değerlerini almam gerekiyor. stok degerine gore müşteriye tıklanabilir yada tıklanamz yapacagım
                  cok vaktinizi alıyorum ustat farkındayım ama bunuda yanıtlayabilirseniz cok sevinirim.

                    Controller'dan gelen veriyi direk döngüye sokmuyorum. yeni bir array olusturup bu yeni arrayi donguye sokuyorum. bu durumda da tum seçeneklerim işaretli geliyor. Help me üstat. 🙂

                    @php
                            $data = [];
                        foreach ($attributes $attribute){
                                $data[$attribute->name] = [$attribute->attributeValues->pluck('name')];
                        }
                    
                        foreach ($data as $key => $value){
                            <p class='fw-bold m-0 my-2'>{{ $key }}</p> // Renk ve Beden olarak geliyor
                            foreach ($value as $val){
                                <span class="me-2 border p-1 px-2 rounded">
                                    {{ $val }} // Renk Altına : Kırmızı - Mavi Beden Altına : S M XL olarak geliyor
                                </span>
                            }
                        }
                    @endphp

                      SerkanMUTU Ürün özellikleri var bir de ürünün varyantına bağlı özellikler var. Ürün özelliklerini foreach içerisinde dönerken içeride ürünün varyantına bağlı özellikler ile karşılaştıracaksınız. Eğer eşleşme varsa seçili yapacaksınız. Üstte size örnekle anlatmaya çalıştım.

                        mgsmus Sorunu çözdüm üstat çok teşekkür ederim. Ellerine sağlık

                        2 yıl sonra

                        Merhaba varyant sistemi için oluşturduğum 6 adet tablo sistemi var
                        products, variantgroups , productvariants , productcolors,attributes, pivot tablo chatgpt nin yaptığı işlemin doğru olup olmadığını bilmiyorum bu konuda yardımcı olabilecek var mi ? @mgsmus hocam. İşlemleri panele entegre etme konusunda takılıyorum.

                        variantgroups tablosunda farklı ürünler için varyant grubu ekledim Mobilya Ürünleri için Ölçü Bilgileri , Ayakkabı Ürünü için Numara , gibi kayıtlar.

                        Takıldığım Nokta İlişkileri kullanmak ve panele entegre etmek.

                          umutcankarce Yeni bir konu açın, onun üzerinden devam edelim. E-ticaret kapsamlı bir yapı, o yüzden genel bir bütün olarak anlatmak zor. O yüzden parçalara bölüp, mesela "şununla şunun ilişkisi nasıl olacak" ya da "şunun şu şekilde olmasını istiyorum, nasıl yapılabilir" gibi sorular sorarsanız ilerleme kaydedebiliriz.