2015-04-01 29 views
6

Veritabanı yapmam temel olarak her tablo için birden çok birincil anahtardan oluşur, bu nedenle birleştirme için birden fazla sütun gerekir. ColdFusion (spesifik olmak için 11) ORM collection property'u kullanmaya çalışıyorum. fkColumn özniteliğinde virgülle ayrılmış bir sütun listesi, relationship properties için olduğu gibi çalışmıyor. Ben filed a bug with Adobe var, ama başka birinin bu işe koşup gitmediğini ve geçici çözümler bulup bulmadığını merak ediyorum. Ya da belki sadece yanlış yapıyorum ..ColdFusion: Birden Fazla Yabancı Tuşa Sahip ORM Koleksiyonu

Tablo Kur

Years  Staff   StaffSites Sites 
=========== ============ ============ =========== 
YearID (PK) StaffID (PK) YearID (PK) SiteID (PK) 
YearName  StaffName  StaffID (PK) SiteName 
          SiteID (PK) 

Personel ORM CFC

component persistent=true table='Staff' { 
    property name='id' column='StaffID'  fieldType='id'; 
    property name='year' column='YearID'  fieldType='id'; 
    property name='sites' elementColumn='SiteID' fieldType='collection' table='StaffSites' fkColumn='StaffID,YearID'; 
} 

Sorun

bir hata olduğunu oluşturulan sorguyu çalıştırırken:oluşturulan sorgu önceki çekme

, sütun liste düzgün where madde için ayrıştırılmaz görünür, ancak biraz select ekspresyonunda birden çok sütun olduğunu anlar.

select 
    sites0_.StaffID, 
    YearID as StaffID1_2_0_, 
    sites0_.SiteID as SiteID4_0_ 
from 
    StaffSites sites0_ 
where 
    sites0_.StaffID,YearID=? 

doğru çok önemli "katılmak" desteklemek için ORM toplama özelliği, Hedef

. Neden bir ilişkiyi kullanmıyorsun? Sonra REST hizmetlerinde kullanmak için JSON olarak serileştirmek için ORM nesneleri kullanmak istiyorum. Serileştirilmiş JSON, gerçek ilişki verileri değil, ilişkilerin kimliğini içermelidir. Örneğin, JSON yükü olmalıdır:

yerine gibi bir şey
{ 
    "id": 1234, 
    "year": 2015, 
    "sites": [1,2,3] 
} 

: DB yapısı için

{ 
    "id": 1234, 
    "year": 2015, 
    "sites": [ 
     {"id": 1, "name": "Foo"}, 
     {"id": 2, "name": "Bar"}, 
     {"id": 3, "name": "Baz"}, 
    ] 
} 
+0

Mesaj DİNLENME hizmetlerinde kullanılmak üzere beklenen JSON bir örnek denemelisiniz. – Henry

+0

@Henry İstediğiniz örnekleri ekledim. Herhangi bir girdi için teşekkürler. "Post-load" verilerini elle almak için ORM kancalarını kullanmayı düşünüyordum. Bu projeye geri döndüğümde bunu deneyeceğim. – Panman

+0

, bu JSON'u Personel kuruluşundan istediğiniz gibi görünüyor. "Staff" için özel seri hale getirici (CF11'de yeni) kullanın ve geri kalanını bağlantıya sahip bire çok veya çoktan çoğa olarak ayarlayın. – Henry

cevap

0

, ORM çevirmek en kolay yolu için linktable olarak "StaffSites" kullanmak olacaktır çoktan çoğa ilişkiler.

Sen CF11 Custom serileştirici http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2

+0

İlişkilerdeki sorun, gerçek ilişki verilerinin serileştirilmiş JSON'a dahil edilmesidir. Sadece serileştirme sırasında ilgili kimliği almam gerekiyor, bunun yerine koleksiyonun muhakeme sebebi de bu. – Panman

+0

@Panman, o zaman neden ORM kullanıyor? :) Eğer kimlikleri ile uğraşmayı tercih ederseniz sadece eski cfquery kullanın. – Henry

+0

Diğer ORM özelliklerini kullanmak isterim; arama, önbellekleme, vb. Ve diğer iş mantığını organize etmenin iyi bir yolu. – Panman