Похоже, вы на правильном пути.Если я вас понимаю, это так и должно быть:
Я не совсем понял одно из ваших утверждений, поэтому я исхожу из предположения, что post
belongsTo
один blog
как и большинство.
Первая проблема заключается в том, что соглашение об именовании в вашей "сводной таблице" должно быть в алфавитном порядке - поэтому оно должно быть blogs_users
, а не users_blogs
.Кажется незначительным, но не будет работать иначе.
Ассоциации:
blog hasMany post
post belongsTo blog
user hasAndBelongsToMany blog //allowing more than one user to be associated to a blog
blog hasAndBelongsToMany user
user hasAndBelongsToMany post //allowing more than one user to be associated to a post
post hasAndBelongsToMany user
role hasAndBelongsToMany user //better to keep roles in a table that just a string
user hasAndBelongsToMany role //use 'with'=>'blogs_users' in your association
between user/roll
Таблицы:
users (id, name, ...etc)
blogs (id, title, ...etc)
roles (id, role)
blogs_users (id, user_id, role_id, blog_id)
posts (id, title, blog_id)
posts_users (id, post_id, user_id)
Обновление:
Я не самый лучший в этом деле - все еще немного учусь сам, но - изо всех сил, вы можете получить сообщения из блога 1, созданные пользователем 1, черезкак то так:
$blogId = '1';
$userId = '1';
$posts = $this->Post->find('all', array(
'conditions' => array(
'User.id' => $userId,
'Blog.id' => $blogId
)
);