2013-07-31 2 views
2

У меня есть три таблицы (блоки, роли, пользователи), где справедливо следующее в схеме:CakePHP таблицы базы данных определения трех зависимых отношений

blocks have many users 
users have many blocks 
users have many roles, but the roles are specific to the block (and the user) 
blocks have many roles, but the roles are specific to the user (and the block) 

Например:

user => john 
belongs to block => 'metro' with role => 'builder' 
belongs to block => 'rural' with role => 'investor' 

user => dan 
belongs to block => 'metro' with role => 'resident' 
belongs to block => 'rural' with role => 'investor' 

У меня есть присоединиться к таблице с именем block_role_user со следующими столбцами:

id block_id role_id user_id created modified 

Я думаю, это было бы hasandbelo ngstomany между всеми тремя таблицами. Я подумал о том, чтобы установить это с помощью таблицы hasandbelongstomany между блоками и пользователями, а другая таблица hasandbelongstomany между ролями и пользователями, но это не будет полностью определять уникальную взаимосвязь между блоком, ролью и пользователем.

Я ищу совет по наилучшему способу приблизиться к этому и оценить любые советы.

Я искал привязку модели, но это, похоже, не относится к уникальным отношениям между тремя частями, которые у меня есть.

Я подумал о создании модели, называемой blockroleuser, и установлении отношений с использованием стандартного соглашения cakephp. Если это приемлемый способ, можете ли вы дать некоторые рекомендации по наименованию файлов модели и контроллера?

Еще раз спасибо ...

ответ

0

Если я вас правильно, то вы ищете отношения менее рыхлые, чем HABTM, который будет определять конкретную связь между User, в Block и Role.

Лично я бы, вероятно, использовать модель, которая определяет эти отношения с помощью belongs to, где User может иметь многие из тех, что-то вроде:

User hasMany Whatever 

Whatever belongsTo User 
     belongsTo Block 
     belongsTo Role 

Это, вероятно, более или менее то, что вы Мента, когда вы говорили о модели BlockRoleUser, правильное именование может зависеть от того, что именно представляют собой блоки. Конечно, общее название, например, Involvement или даже UserBlockRole, тоже может быть прекрасным, я не думаю, что вам нужно слишком много об этом беспокоиться.

В любом случае, это выглядит довольно прямолинейно и строго для меня, и, если необходимо для вашего приложения, то дополнительные HABTM отношения могут быть установлены с использованием той же таблицы. Эти HABTM отношения, скорее всего, будет использоваться только для выбирает только, например, когда там нужно для запроса всех в Blocks с User связано, или при тестировании ли в User связан с конкретным Block и т.д ...

+0

I оцените советы и объяснения. Все сделанные вами предположения были верны на моем конце (конкретная связь между пользователем, блоком и ролью, в основном используется для выбора (и получение пользователей, указанных в конкретном блоке с той ролью, которая входит в игру только для решения, может ли пользователь редактировать что-либо, связанное с блок) .Спасибо за руководство к модели.Это было так, как я собирался, но повесился на конвенции именования. Я думаю, что «участие» будет отличным именем, но согласитесь, что соглашение действительно не имеет значения до тех пор, пока он точно описывает и понимается позже. – pinned5th

+0

Кстати, я проверю ответ как полезный, как только мой рейтинг репутации позволит мне - еще раз спасибо. – pinned5th

+0

Добро пожаловать ... – ndm

Смежные вопросы