2016-04-11 28 views
0

Birden çok tablo devralma kullanarak bir kullanıcı sınıfları hiyerarşisi var. Belirli bir ızgara için, farklı çocuk sınıfları için farklı şekilde temsil edilen kullanıcı adlarına göre filtrelemem gerekiyor.Doctrine: Birden çok tablo devralma ile alt sınıfların alanlarını kullanarak üst sınıfı sorgulama

SELECT u FROM User u WHERE 
(u INSTANCEOF CustomerUser 
    AND CONCAT ((CustomerUser)u.firstName, ' ', (CustomerUser)u.lastName) 
     LIKE :searchString) 
OR (u INSTANCEOF InternalUser AND (InternalUser)u.name LIKE :searchString) 

Doktrin ile bu mümkün gibi tip döküm falan mı, yoksa yerel bir sorgu oluşturmak için tek yoldur:

Başka bir deyişle, böyle bir DQL sorgu oluşturmak gerekir?

Şimdiden teşekkürler.

cevap

2

Tam sorunuzun yanıtından daha fazla bir çözüm, ancak sorgunuzu basitleştirmek ve hızlandırmak için bir çözüm, üst düzeyde bir displayName özelliği eklemek olacaktır. Çocuk sınıflarında firstName, lastName ve name setter'lerinde, istediğiniz gibi güncellemek için bir kod ekleyin. Daha sonra

SELECT u FROM User u WHERE displayName LIKE :searchString 
+0

Teşekkürler, bu elbette temelde mümkün, ama yine de doğrudan bir çözüm varsa merak ediyorum. – amik

İlgili konular