CakePHP en özlü ve tam Recursive Derneği Destek?

3 Cevap php

Ben şu anda yaklaşan bir web uygulamasında kullanmak olacak eğer karar, CakePHP ile mucking ediyorum.

Sorun birkaç tablo var, hangi birbirleri ile bazı noktası paylaşım ilgili verilere. Ben bütün kodu kendim yazmak için olsaydı ben değil katılır ve alt sorgular farklı bir sürü kullanarak bir SQL sorgusu kullanabilirsiniz. Ama CakePHP sadece destekleyen ne anlıyorum iki tablo arasında katıldı.

Yani, örneğin, ben Kullanıcılar, Profili, Rank, Rating tablo var ve ben profil, rütbe ve belirli bir kullanıcı derecelendirme almak istiyorum. CakePHP birden fazla, ayrı SELECT ifadeleri kullanarak hile yapmak olacaktır. Ama bu birden katılır ile bir sorgu kullanarak mümkün olacaktır. Performans oldukça önemli olması bekleniyor, bu nedenle SQL sorguları ile çok savurgan olmaması büyük bir ikramiye olduğunu.

İki kesmek (one behaviour ve one using bindModel) ve a similar StackOverflow thread buldum.

Ben davranış veya BindModel kesmek kullanmak isteyip kararsız değilim. Herkes iyi yaklaşım nedir olarak herhangi bir ışık tutabileceğini - alanında yani. ne genel CakePHP yapısı iyi entegre (pagination gibi özellikler hala mevcuttur)? Ya sonuçta daha iyi olan başka bir yaklaşım yoktur. SO parçacığı containables kullanarak bir yöntem bahseder.

Bunun için ayrı bir soru açılması yanlış değilim, ama eski iplik bazı çözümler listeler, ancak cevap yukarıda belirtilen nedenlerden dolayı bu benim için açık değildir umarım.

3 Cevap

Bunu yapmanın en kolay yolu reducint ile sql sorguları rahatsız değil ve önbelleğe çeşit uygulamaktır.

Sonraki çözüm değil - sorguları azaltmak için çalışmıyor çünkü Containable davranışları atlayarak ad-hoc find katılır bazı çağrıları doğrudan yapmaktır. Eğer merkezi bir yerden onları aramak böylece modelin içine bu bastırıyor tavsiye edilir. Bu tekniği iyi bir makale burada ekmek üzerinde: http://bakery.cakephp.org/articles/view/quick-tip-doing-ad-hoc-joins-in-model-find

Ben bugüne kadar bulduk best çözüm Rafael BANDEIRA en Linkable davranış: Bir üzerinde katılmak için alanları ve ilişkileri tanımlayan seçenekler dizisinin özel anahtarını kullanmanızı sağlar http://blog.rafaelbandeira3.com/2008/11/16/linkable-behavior-taking-it-easy-in-your-db/, hangi net moda ve [1] kullanmak için açıklanan tekniği kullanır yerine ardışık sorguları katıldı.

Proje ile iyi şanslar.

Için link this bakery article Bahsettiğiniz diğer StackOverflow makalede, muhtemelen reklam-hoc (BindModel veya özel bir davranış olmadan) katıldı yapmak için iyi bir yöntemdir. Zaten yöntem çağrıları) (herhangi bulmak için seçenekleri (örneğin birleştirme türü olarak ekstra çerez dahil) satır içi katılır belirtebilirsiniz, ancak bu büyük ölçüde bulmak daha az yazma gerektiren bir yeni bulmak "türü" (oluşturarak basitleştirilmiş olabilir ) seçenekleri. Bu makalede buydu.

Ben de bazı sorgular için ham SQL kullanmak için kullanılır, ancak CakePHP tarafından desteklenen veritabanları ile öngörülemeyen uyumsuzluklar neden olabilir bulundu. Eğer kitleler tarafından kullanılan bir web uygulaması yazma değilse Ancak, bu konuda çok olmayabilir.

Ben de benzer sorunları vardı ve performansı büyük bir etken oldu çünkü sadece ham SQL kullanmak yerine denemek ve sadece "kek-lık" korumak için çözümler ile keman karar verdi. Artı bazen tıkanıklık olduğu (2 hata ayıklama modu biraz yardımcı olsa bile) bilmek sadece güzel. Db göç hiç bir sorun olmayacaktır.

Eminim ki geçmişte bunu yaptı - I Really bu kodu kendiniz vb sıralama, otomatik sayfalama kolaylık üzerinde performans için gitmeye karar verdi.

BindModel çözümü ancak beni ilgilendirmiyor gelmez. Bu ben bu sorunu rastlamak sonraki süre için gitmek istiyorum budur.