PHP için Doctrine ORM (v1.2) ile deneme yapıyorum. İki çocuk sınıfı "cin" ve "viski" ile bir sınıf "likör" tanımladım. Sınıfları üç ayrı veritabanı tablosuna ayırmak için somut kalıtım (çoğu literatürde sınıf tablosu kalıtım) kullanıyorum. PHP doctrine 1.2 ORM - sınıf tablosu devri ile polimorfik sorgular
aşağıdaki yürütmek çalışılıyor:$liquor_table = Doctrine_Core::getTable('liquor');
$liquors = $liquor_table->findAll();
Başlangıçta, onlar viski veya cin olsun, $ likörler tüm likör içeren bir Doctrine_Collection olması bekleniyor. Ama kodu çalıştırdığımda, viski ve cin veritabanı tablolarında birkaç satır olmasına rağmen boş bir koleksiyon alacağım. Oluşturulan SQL'e dayanarak nedenini anlıyorum: ORM, gerçek verilerin depolandığı viski/gin tablolarını değil, "likör" tablosunu sorgulamaktadır.
Devralma türünü sütun birleştirmeye (basit tablo devralma) geçirdiğimde, kodun mükemmel çalıştığını unutmayın.
Tüm sıvıları içeren bir Doctrine_Collection elde etmenin en iyi yolu nedir? Ben Doktrini "viski" ve "cin" tablolardan sonuç kümelerini birleştirmek için perde arkasında SQL UNION
işlem gerçekleştirme bekliyorum gibi
biraz daha araştırmadan sonra
Güncelleme görünüyor.
Bu, polimorfik sorgu olarak bilinir.
this ticket'a göre, bu işlev Doctrine 1.x'te bulunmamaktadır. 2.0 sürümü için hedeflenmiştir. (Ayrıca CTI için Doctrine 2.0 belgelerine bakın). Bu bilginin ışığında, bu eksikliği gidermek için en temiz ve en verimli yol ne olurdu? Tek tablo devralmaya geçilsin mi? İki DQL sorgusu gerçekleştirin ve elde edilen Doctrine_Collections öğesini manuel olarak birleştirin mi?