Во-первых, CakePHP автоматически изгибает таблицу people
в контроллер people
и модель person
, поэтому вам не нужно называть ее persons
. Тогда я бы назвал справочную таблицу relationships
, а не persons_persons
.
Я бы назвал поля в вашей таблице отношений person_id
, relation_id
и relation_type_id
, а затем добавил бы подчеркивание в вашем relationtypes
имени таблицы, чтобы оно стало relation_types
.
Я думаю, что это более семантически.
Вы все еще можете использовать ассоциацию hasAndBelongsToMany и использовать автоматические ассоциации " с ", предлагаемые CakePHP (только 1.2), для доступа к дополнительным данным в таблице HABTM для типа отношения.
Тем не менее, я бы хотел использовать:
Person
hasMany Relation
Relation
принадлежит Person
, Relation
, RelationType
В вашем приложении подразумевается ли отношение людей к кому-то другому? То есть если вы найдете Person.id = 1, вы можете получить все их отношения, например, Person.id 2, 3 и 4. Но если вы найдете Person.id 2, вы не получите автоматически Person.id = 1, если в таблице отношений не было другой записи, представляющей эти отношения.
Чтобы достичь этого, вы можете установить другую ассоциацию:
Person
hasMany Relation1
с ForeignKey person_id
Person
hasMany Relation2
with foreignKey relation_id
Relation
принадлежит Person
, Relation
, RelationType
Обратите внимание, что вы можете добиться этого двойного отношения и с HABTM.