Bir CakePHP uygulaması için bir tableA HABTM tableA ilişki oluşturmak için en iyi yolu nedir?

1 Cevap php

Benim kayıtlı kullanıcılar diğer kullanımları ile kendilerini ilişkilendirmek ve bir aile oluşturmak için izin işlevselliği oluşturmak için ihtiyaç var. Benim veritabanı tabloları bu gibi görünmelkimlikir:

db.persons - (Bob Jane, Timmy, vb)

  • kimlik
  • isim
  • E-posta

db.persons_persons

  • kimlik
  • person__kimlik_parent
  • person_kimlik_child
  • relationtype_kimlik

db.relationtypes - (eş, çocuk, yeğen, vs)

  • kimlik
  • isim

Bu yapı sayesinde, Bob persons_persons tabloda Jane bir Eşinizin olduğunu belirtmek gerekir. Db.persons_persons yılında rekor (zikretmekte içine düştüğü sahte) gibi görünecektir:

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

Bob ve Jane evli ise, o zaman birinin bir çocuk, diğer ilişkili olması gerekir çünkü bu bazı veri parçalanmasına neden olabilir fark. Ancak bu benim soru değildir. Benim sorum bu veritabanı kurulumu cakePHP uygulamasında kullanmak için 'en çok doğru' olup olmadığını ya da değildir.

1 Cevap

Öncelikle, CakePHP automatigally bir people kontrolör ve bir person modeli bir people tablo eğmek, bu yüzden [(3) {aramak gerekmez }]. Sonra persons_persons arama tablosunu çağrı relationships ziyade ederim.

I person_id ilişkilerinizi tablodaki alanları aramak, relation_id ve relation_type_id, ve sonra relationtypes tablo adı bir çizgi eklemek istiyorum bu nedenle olur relation_types.

Ben bu daha anlamsal olduğunu düşünüyorum.

Hala hasAndBelongsToMany dernek kullanmak, ve "with" CakePHP'de tarafından sunulan dernekler (1.2 only) ilişki türü için HABTM tablodaki ek verilere erişmek için automagic faydalanmak olabilir.

Ancak, kullanmak için cazip olurdu:

  • Person hasMany Relation
  • Relation belongsTo Person, Relation, RelationType

App, onlara başkasının ilişkisinin ima bir kişi ilişki nedir? Yani Eğer Person.id = 1 olabilir olsun tüm ilişkileri, örneğin bulursanız Eğer Person.id 2 bulursan bu ilişkiyi temsil ilişkiler tablodaki başka bir rekor olmadığı sürece Person.id 2, 3 ve 4. Ancak, otomatik, Person.id = 1 almak olmaz.

Bunu başarmak için, başka Derneği'ne kurabilirsiniz:

  • Person hasMany Relation1 ForeignKey ile person_id
  • Person hasMany Relation2 ForeignKey ile relation_id
  • Relation belongsTo Person, Relation, RelationType

Çok habtm ile bu ikili ilişkiyi elde edebilirsiniz, unutmayın.