Assuming you are using CakePHP 2.x
It is a good idea to define a primary key in your HABTM table - in the
books_users table (name should be alphabetic order, but you can deviate).
Thus your table definition is:
books_users
id, book_id, user_id
What is your comment table reflecting?
1) comments added to a book by a user?
2) comments added to a book_user?
To me it sounds like you have implemented 2) - if that is so, please
clarify your reason :)
I would go with 1) - so that your comments table definition becomes:
comments
id, book_id, user_id, comment, ...
where book_id is a reference to the books table and user_id is a reference
to the users table.
Enjoy, John
On Friday, 6 February 2015 22:46:08 UTC+2, gt0p wrote:
>
> I am trying to bind 3 tables and I am having problems with proper
> relations.
> Table users (pk id), books (pk id), users_books (user_id, book_id),
> comments (pk and foreign key book_id, user_id -> with reference to
> users_books)
>
> Here are the models:
>
> Book
>
> public $hasAndBelongsToMany = array(
> 'User' =>
> array(
> 'className' => 'User',
> 'joinTable' => 'users_books',
> 'foreignKey' => 'book_id',
> 'associationForeignKey' => 'user_id',
> 'unique' => true,
> 'conditions' => '',
> 'fields' => '',
> 'order' => '',
> 'limit' => '',
> 'offset' => '',
> 'finderQuery' => '',
> // 'with' => 'UserBook'
> ),);
>
> public $hasMany = array('Comment'=>array('className'=>'Comment'));
>
> Comment:
>
> public $belongsTo = array (
> 'Book' => array (
> 'className'=>'Book',
>
> )
> );
>
>
> When I try to save with the saveAll method I got:
>
> *Error: * SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot
> add or update a child row: a foreign key constraint fails
> (`metabook`.`comments`, CONSTRAINT `comments_ibfk_1` FOREIGN KEY
> (`user_id`, `book_id`) REFERENCES `users_books` (`user_id`, `book_id`))
>
> I know that this is not according to the cakephp conventions, but what I
> can do to bind those tables?
>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.