То, что вы описываете, является своего рода ассоциацией HABTM (HasAndBelongsToMany).Вы можете определить межмодельные ассоциации, как вы предлагаете, но есть довольно существенный недостаток проекта: как бы вы учитывали ситуацию, когда один и тот же идентификатор используется для записи orgs
и записи contents
, и хотите связатьих с той же folder
записью?Было бы невозможно провести различие между этими двумя в вашей объединяющейся таблице.
Существует несколько способов обойти это, но они требуют большей программной логики или более неорганизованной схемы базы данных, которая создает проблемы в обслуживании.
Более элегантное и надежное решение - рационализировать структуру вашей базы данных.Если нет настоятельной необходимости иметь единую таблицу соединений, чтобы управлять ими всеми, вы можете создать ассоциации моделей следующим образом:
Content hasMany ContentsFolder belongsTo Folder
Folder hasMany ContentsFolder belongsTo Content
Org hasMany OrgsFolder belongsTo Folder
Folder hasMany OrgsFolder belongsTo Org
Это внутренняя структура ассоциации HABTM, определенная явно, поэтому вы можете определять поля в присоединяемой таблице.Ваши таблицы contents
и folders
останутся прежними, но две соединяемые таблицы будут выглядеть так:
contents_folders
-> id
-> content_id
-> order
orgs_folders
-> id
-> org_id
-> order
К сожалению, да, для этого потребуется определить пять моделей вместо трех, но таковыограничения объектно-реляционного моделирования CakePHP.