CakePHP'de İçeren Davranışı kullanmaya çalışırken biraz zaman geçirdim, ancak beklediğim gibi çalışamıyorum.CakePHP: Çok düzeyli İçindekiler Kullanılabilir Davranışı Kullanma
Uygulamam farklı ama basitleştirmek için bu örneği koyacağım. Konu ve etkinliklerle bir forumum olduğunu ve etkinliklerin değerlendirilebileceğini varsayalım. genel ilişkiler olacaktır:
Forum: hasMany [Konu]
Konu: belongsTo [Forum], hasMany [Etkinlik]
Etkinlik: belongsTo [Konu], hasMany [Derecelendirme]
Değerlendirme: belongsTo [Etkinlik]
Elde etmek istediğim, bulma yöntemini kullanarak belirli bir forumda gerçekleştirilen tüm derecelendirmeleri elde etmektir.
$this->Rating->find('count', array(
'contain' => array(
'Activity' => array(
'Thread'
)
),
'conditions' => array(
'Thread.forum_id' => 1
)
));
Ama sonuç sorgusu: Ne yapılmalı varsayalım şudur
SELECT COUNT(*) AS `count` FROM `ratings` AS `Rating` LEFT JOIN `activities` AS `Activity` ON (`Rating`.`activity_id` = `Activity`.`id`) WHERE `Thread`.`forum_id` = 1;
Ben 'katıldı' seçeneğini kullanarak bu başardığımı, ama daha karmaşık ve ben gerek Birçok durumda bu tür eylemleri kullanın. Örneğin ilgili
tüm dosyalar burada bulabilirsiniz: http://dl.dropbox.com/u/3285746/StackOverflow-ContainableBehavior.rar
Teşekkür
Güncelleme
23.11.2011 Moz Morris cevaplara çerçevesini ve teşekkür araştırdıktan sonra ve api55 Sorunun kaynağını buldum.
Temel sorun, CakePHP'yi anladığım kadarıyla, her seferinde katılımları kullanarak sorgulamayı düşündüğüydü.
SELECT * FROM Rating JOIN Activity...
SELECT * FROM Activity JOIN Thread...
SELECT * FROM Activity JOIN Thread...
...
tüm faaliyetlerini almak için bir sorgu yapacağını Anlamı: o bunu yapmaz o şey, gerçek operasyon böyle bir şey olurdu aradığım sonucu elde etmek gerçekleştireceklerini ve sonra, her aktivite için, Konuları elde etmek için bir sorgu gerçekleştirin ... İçeren Davranış Davranışı yanlış kullanıldığından değil, tüm koşullara 'koşullar' seçeneği uygulandığından ve ilkinde yaklaşımım başarısız oldu. Konu tablosunun yokluğu nedeniyle çöktü.
api55 o Konu tablosu kullanılarak sorulara sadece bunları uygulamak istiyorum 'karakterini' dizisi içindeki koşulları kullanarak, söylediği gibi: Bu out bulduktan sonra iki olası çözüm vardır. Ama bunu yapmak sorun devam ediyor, çünkü çok fazla sorumuz var.
Moz Morris'in dediği gibi, Thread modelinin Derecelendirmeye bağlanması da işe yarayacak ve istediğimiz şey tek bir sorgu gerçekleştirecektir. Sorun şu ki, ilişkilerin modellerini atlayan ve CakePHP felsefesini takip etmeyen bir yama olarak görüyorum.
Api55 çözümünü doğru olarak işaretledim çünkü bu benim yaptığım somut problemi çözdü, ancak her ikisi de problemi çözdü.
İş parçacığı dizisindeki 'koşulların' işlenmesi işe yaramayacaktır çünkü sonuçlar 'Thread' dizisi boşken her şey için yine de döndürülecektir. –
@MozMorris thats true, çünkü birleşimden ayrıldı ... ama eğer en üstünden (forumdan/thread'dan) koşuyorsa, tüm notları veya boşluğu alacaktır, ancak çok can sıkıcı bir ağacınız olacak (genellikle linkable kullanıyorum) davranış) – api55
Yanıtladığınız için teşekkür ederiz. Bağlantıda sağladığım kod üzerinde denedim ve sorgu, SELECT COUNT (*) forumları AS Forum WHERE Forum.id = 1' olarak kabul edildi. AppModel'de ve her şeyde bulunan İçeren Davranışlar zaten var. Bazı yapılandırma sorunum veya bir şey var mı bilmiyorum, ancak düzgün çalışmıyor gibi görünüyor. –