Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • YardımLaravel
  • Pivot tabloda tekrar eden kayıtları nasıl engelleriz?

  • Leon

      Seviye 31
    • Düzenlendi

    Merhaba,

    Urun ve Urundetay isminde iki tablom var.

    Urun
    id | urun_adi | ilk_fiyat | y_fiyat
    1    OPPO 5G   10.00       20.00
    2    OPPO 6G   20.00       30.00
    3    OPPO 7G   30.00       40.00
    4    OPPO 8G   40.00       50.00
    Urundetay
    id  |  key   |   value   |    type   |   status   | icon   |   image
    1       CPU       8             CORE     1          fa-cpu
    2       RAM       8             CORE     1          fa-memory
    3      DISP      5             SCR      1          fa-mobile
    urun_urundetay
    id | urun_id | urundetay_id
    1      1              1
    2      1              1
    3      2              1

    urun_urundetay pivot tablomda aynı kaydın oluşmasını nasıl engellerim? Hazır bir metod var mı? Yoksa eklerken her defasında kontrol ederek mi ekleme yapmalıyım?

    • fthyuksel bunu yanıtladı.
    • Leon urun_urundetay tablonuza unique composite index eklemeniz lazım. Migrasyon dosyasında:

      $table->unique('urun_id', 'urundetay_id');

      Leon
      Urundetay tablondaki id benzersiz bir değer mi?
      Örneğin OPPO 5G adlı ürünün CPU ve RAM özelliklerini için pivot tablosunda farklı 2 kayıt olmuş gibi duruyor. Urundetay tablosundaki id yi benzersiz şekilde ayarlarsan problemin çözülecek gibi sanırım.

      • Leon bunu yanıtladı.

        fthyuksel Urundetay tablosundaki id yi benzersiz şekilde ayarlarsan problemin çözülecek gibi sanırım.

        Onu yanlış yazmışım Urundetay tablosundaki tüm idler benzersiz.

          • mgsmus

            Seviye 1382
          • Düzenlendi
          • En İyi YanıtLeon tarafından

          Leon urun_urundetay tablonuza unique composite index eklemeniz lazım. Migrasyon dosyasında:

          $table->unique('urun_id', 'urundetay_id');
          • Leon

              Seviye 31
            • Düzenlendi

            @mgsmus Teşekkür ederim hocam hal oldu.

            • Leon

                Seviye 31
              • Düzenlendi

              @mgsmus Hocam erken davranmışım 🙂 olmamış.

              urun_urundetay
              id | urunler_id | urundetay_id
              1      1              1
              2      1              2
              3      2              1
              4      2              2

              [23000][1062] (conn=508) Duplicate entry '1' for key 'urunler_id'

              Bir ürünün birden fazla özelliği olabilir. fakat bir üründe aynı özellikten iki tane olmamasını istiyorum.

              • Leon

                  Seviye 31
                • Düzenlendi

                migration reset yaptım sildim tekrar oluşturdum şimdi çalıştı çok garip. İşin garibi başka bir tablomda unique yok ama oda çalışıyor sorunsuz.

                  Leon Tabloda kayıt varsa ve sonradan eklediğiniz indekse aykırı ise indeks eklemesine izin vermez.

                  • Leon

                      Seviye 31
                    • Düzenlendi

                    @mgsmus Hocam biraz kurcukladım.

                    $table->unique('urun_id', 'urundetay_id');

                    Bu şekilde kullanınca sadece bir sütunda aynı rakamı kabul etmiyor.

                    $table->unique(['urun_id', 'urundetay_id']);

                    Bu şekilde kullanıncada varyasyonu aynı olanları kabul etmiyor yani iki sütundada 1 1 varsa tekrar eklemeye çalıştığınızda 1 1 var diyor. Yani bu kısım işe yaradı teşekkür ederim. distinct etmeye gerek kalmadı.

                    Hocam peki örnek olarak 1 numaralı ürüne ait özellikleri güncelleyecek isek biz burada önce bir numaralı ürüne ait tüm eşleştirmeleri silmeli sonra yenilerini mi eklemeliyiz? Yoksa daha kolay hazır bir yöntem var mı?

                      • mgsmus

                        Seviye 1382
                      • Düzenlendi

                      Leon Duplicate kayıtları silmeniz gerekiyor. Ayrıca $table->unique(['urun_id', 'urundetay_id']); olması gerekiyordu ben yanlış yazmışım kusura bakmayın.

                      • Leon

                          Seviye 31
                        • Düzenlendi

                        @mgsmus Yok hocam olur mu ne kusuru işinizin gücünüzün arasında birde bize durmadan bir sürü bilgi veriyorsunuz, teşekkür ederim.