CakePHP‘de modeller arasındaki ilişkilendirmeler diğer yazılarımda şurada ve şurada bahsetmiştim. Şimdi bu ilişkilendirmeleri daha ayrıntılı olarak inceleyeceğiz. CakePHP’de 4 ilişkilendirme bulunmaktadır:* hasOne* hasMany* belongsTo* hasAndBelongsToMany (HABTM)hasOne
Bu ilişkilendirmede bir modele ait bir model bulunur. Burada Kullanici ve Profil adında iki farklı modelimiz var. İlişkilendirme sonucunda bir kullanıcının bir profili olur. array(“className”=>”Profil”,”dependent”=>true));}?> Burada bir array kullanarak özellikleri biraz daha değiştirdik. İlk örnekteki ilişkilendirmelerde model isimlerinin de uygun olması gerekiyordu. Ama şimdi model ismini biz belirttiğimiz için sorun yok. “dependent” parametresini true yaptığımızda ise herhangi bir kullanıcı silindiğinde ona ait profil de silinir.
hasMany
Bir modele ait birden fazla model olduğunda bu ilişkilendirmeyi kullanırız. Anne ve Cocuk olmak üzere iki modelimiz var. İlişkilendirmeyle bir anneye ait birden fazla çocuk olduğunu belirtiyoruz. Bu ilişkilendirmede eğer belirtilmediyse model ismi Cocuk yerine Cocukanne olması gerekiyordu. Varsayılan ismi değiştirmek için şöyle yapabiliriz: array(“className”=>”Cocuk”,”foreignKey”=>”anne_id”,”dependent”=>true);}?> Burada ilişkilendirdiğmiz modelin ismini (className) ve veritabanında ilişkilendirmenin yapıldığı anahtarı (foreignKey) belirttik. Bir çocuğun “anne_id” değeri 5 ise bu çocuk 5 numaralı id’si olan anneye aittir demektir. “dependent” parametresini true yaptığımız zaman, bir anneyi sildiğimizde ona ait tüm çocuklar da silinir.
belongsTo
Birden fazla model bir modele aitse bu ilişkilendirme kullanılır.array(“className”=>”Urunkategori”,”foreignKey”=>”urunkategori_id”));}?> Her Urun modeli bir Urunkategori modeline aittir. Yani her ürünün bir kategorisi vardır ya da bir kategoriye ait birden fazla ürün vardır.hasAndBelongsToMany (HABTM)
Bu ilişkilendirmeyi bir örnekle açıklayalım. Yazi ve Etiket olmak üzere iki modelimiz olsun. Bir yazının birden fazla etiketi olabilir. Aynı zamanda bir etiketin birden fazla yazısı vardır. Yani aynı etiket birden fazla yazıda olabilir. Böyle bir durumda ıHABTM kullanılır. array(“className”=>”Etiket”,”joinTable”=>”yazi_etiket”,”foreignKey”=>”yazi_id”,”associationForeignKey”=>”etiket_id”,”unique”=>true));}?> array içinde kullandığımız parametreler:className : İlişkilendirdiğimiz modelin adıjoinTable : ilişkilendirmelerin tutulduğu tablo ismiforeignKey : bir modelin ait olduğu modelin id numarası .burada ise etiketin ait olduğu yazının id numarasıdır.associationForeignKey : her yazının ait olduğu bir veya birden fazla etiket vardır. ait olduğu etiketin id numarasıdır.unique : bu parametre true olduğunda, yeni bir ilişkilendirme kaydı eklerken foreign key tablosundan önce varolan ilişkilendirme kaydını siler ve güncellemeyi yapar. ( true varsayılan değerdir.)