Doctrine_Query sanal alanları kullanarak

2 Cevap php

Bir Doctrine_Query içine sanal alanlara dayalı mantığı eklemek için bir yolu var mı?

Ben sonuçta benim Doctrine_Query bir Nerede yan tümcesinde kullanmak istiyorum, hangi "getStatus ()" benim modeli sanal bir alan tanımlanmış.

...
->AndWhere('x.status = ?',$status);

"Statü", ancak yerine modelde iş mantığı ile hesaplanan tablodaki bir sütun değil.

Eğer Collection erişimi önce uzaklıklar ve bu hesaplar var gibi bir Doctrine_Pager, karışımı atıldığında sorguyu yürüttükten sonra Koleksiyon filtreleme bazı durumlarda çalışır, ancak.

Ben Doctrine_Pager hendek açılması ve Doctrine_Collection değiştirdikten sonra bu işlevselliği yeniden inşa kapalı iyi miyim?

2 Cevap

SQL'de bunu yapabilirsiniz Eğer Doktrini bunu yapabilirsiniz. Tüm öğreti dizeleri veya değerlerini, sen DQL çözümleyici içine koyarak ne dışarı çalışma yapıyor ve SQL içine sonucundan sonra nemlendirici nesneleri o çeviriyor.

Sen ancak sfPager kullanmak ve bir dizi olarak o Doctrine_Collection sonuçlarını geçebileceği, sigara sorgu nesneler üzerinde sayfaya Doctrine_Pager kullanamıyorum? Kötü durumda bunu sorguya eksi sorguda herhangi bir limit sonuçları geçmek ve sayfalama halledeyim, ancak bu gerçekten verimsiz olabilir.

Bu düz eski PHP yaptığınız gibi çağrı "eski skool" yazmak için daha hızlı olabilir.

Ben gerçekten durumunu çalışmak için uyguluyorsanız ne iş mantığı bilmiyorum ama (istek başına hesaplanmış, gibi) yaşamak değil, ben bir Doktrin Tutanak Dinleyici ya da sadece bir preSave kullanarak (save onu hesaplamak istiyorum / preInsert modelinde kanca) ve tablo içinde saklamak, ya da periyodik olarak yenilemek ve bir cronjob olarak bu çalıştırmak için bir symfony görev kurmak. Yani sadece iyi Doktrini bunu sorgulamak ve bir saçak fayda olarak performansını artırmak izin istiyorum.

Durum ilgili nesnelerin durumuna bağlıdır Alternatif olarak, onlar değiştirilmiş yaparken üst nesnenin durumunu günceller onlara bir olay tetikleyici koyabilirsiniz. Daha bağlamda olmadan iyi yaklaşım tavsiye etmek zor. :)