E-ticaret ayrılmakta Sepeti ürün DB &

3 Cevap php

I have a ecommerce site that has 2 types of products: books & seminars participations. They are different, and have different attributes. I am curious how would you model this in the DB and as models (since you cannot inherit multiple classes)

Right now i have something like: DB

products (id, name ....)
seminars (id, title, date ....)
cart (id, session_id ...)
cart (id, cart_id, type, id_model) the type is product OR seminar

modeller için i have a

cart_item_abstract
cart_item_product -> cart_item_abstract
cart_item_seminar -> cart_item_abstract
cart_order_product -> cart_item_product
cart_order_seminar -> cart_item_seminar

Ama bu i sipariş nesneler tarafından gerekli bazı kod çoğaltmak zorunda kalıyoruz.

3 Cevap

Siz "Kalıtım Mapping için google gerektiğini, bütün bu choices: aşağı kaynar

  • SINGLE_TABLE: Tablo başına sınıf hiyerarşisi, bu senaryoda bir sınıf erarchy ve sınıfları tek bir tabloya eşleştirilir.
  • KATILDI: Tablo-başına-alt sınıfı, bu stratejinin her altsınıf kendi tablo var olacaktır. Veritabanından bir nesne almak için üst sınıf ve alt sınıf tablolar birleştirilir. Bu, aynı zamanda alt sınıflarının alt sınıfları için geçerlidir.
  • TABLE_PER_CLASS: masa başı sınıfının, her beton sınıfı kendi tablosunda saklanır. (Kalıtsal dahil) tüm özellikler beton sınıfı tabloya eşleştirilir.

Vb basitlik vs performansı, - Seçim özel gereksinimi bağlıdır

Bir yaklaşım, yalnızca bir ürün modeli, kitap ve seminerler gibi şeyler başvurusu oluşturmak olacaktır. Yani kitap ve seminerler hem de her kayıt bir product_id referansı var.

Bildiğim kadarıyla alışveriş sepeti kodu ile ilgili olarak, çoğunlukla sadece bir product_id, başlık ve fiyat umurumda.

Katalog kodu farklar hakkında daha fazla umurunda, ama sen seminer kayıtları için yapmak daha kitap için farklı tarama / görüntü işlemek. Ama her ikisi de bir ürün kimliğine sahip olması, böylece kullanıcı s "Sepete ekle" Eğer, sadece "ürün id # 123 eklemek" arabası söyle. SOL hakkında biraz akıllı düşünme Joın ve koşul ne olursa olsun onun tür, kolay sepeti herhangi bir ürün kimliği için başlık ve maliyet anlamaya için yapmalıdır.

Umarım bu yardımcı olur.

Eğer miras desen kusurlu olabilir düşündünüz mü?

Ben bir araba, bir veya daha fazla öğe içeren ve bir kullanıcı sepeti tüm öğeleri satın tamamlamış bir kez sipariş yaratılmış olacağını düşünürdüm. Yani bir sipariş aynı şekilde birden fazla öğe içerecektir.

Bunu göz önüne aldığımızda, öğe türlerinin yanı sıra bir türü alanında (seminer, ürün) arasında ortak olan tüm değerleri tutan tek bir tablo oluşturmak için Veraset Haritalama kullanabilirsiniz. Sonra benzersiz değerleri tutmak için her türü için bir tablo oluşturun.

Sizin temel öğe sınıfı, Ürün Adı, Ürün Açıklaması gibi uygun değerleri dönecektir polimorfik arabirimleri kümesi uygulamak gerektiğini ancak çeşitli alt sınıflardan farklı uygulamaları gerektirir.

Örnek olarak, ben son zamanlarda kullanıcı bir yönetici veya işveren ise bir isim için kullanıcı adını döndürmek için gerekli bir proje üzerinde çalıştı ve ben kullanıcı bir öğrenci ise birleştirilmiş ve soyadınızı dönmek gerekiyordu. Ben (bu durumda view) herhangi bir bağlamsal işlem yapmak yoktu kullanarak uygun değeri ve kodu döndürdü bir işlev _getName () oluşturuldu.

Bu Sepeti ve Sipariş sınıfları ile aynı şekilde olmalıdır. Onlar herhangi bir bağlamsal işlem yapmaya gerek kalmadan Ürün ve Seminer sınıfları ile etkileşim gerekir.