Я использую HABTM для заполнения базы данных. У меня 3 модели. Пользователь, Книга, Комментарий. Чтобы присоединиться к записи в таблицах книг и пользователей, которые я использую в HABTM users_books таблицы и связать комментарии, которые я использую 2 первичные ключи, user_id и book_id, которые оба установлены в качестве внешнего ключа:Корректные ассоциации моделей в cakephp
PRIMARY KEY (user_id, book_id)
FOREIGN KEY (user_id, book_id) REFERENCES users_books (user_id, book_id)
Таблица книг, и users_books заполняются, но в некоторых случаях я могу получить таблицу комментариев, заполненную, но только с user_id и book_id, другие данные - NULL. Или Iif я удалить user_id (Комментарий массив) из запроса SaveAll я получил:
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
Так что я предполагаю, что это либо против конвенций CakePHP или я делаю что-то неправильно.
Вот часть Model Book:
public $hasAndBelongsToMany = array(
'User' =>
array(
'className' => 'User',
'joinTable' => 'users_books',
'foreignKey' => 'book_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'conditions' => '',
'fields' => 'book_id',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
),
'Comment' =>
array(
'className' => 'Comment',
'joinTable' => 'comments',
'foreignKey' => 'book_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',),);
А Комментарий:
public $belongsTo = array (
'Book' => array (
'foreignKey'=>false,
'conditions'=> array('Comment.book_id = UserBook.book_id')));
редактировать:
данных для сохранения
$this->request->data['Book']['title'] = "title".rand(1,1220);
$this->request->data['Book']['author'] = "author".rand(1,1220);
$this->request->data['User']['id'] = $this->Auth->user('id');
$this->request->data['Book']['Comment']['body'] = "cm: ".rand(1,1220);
$this->Book->save($this->request->data, array('deep'=>TRUE));
И сохранить по телефону:
$this->Book->saveAll($this->request->data, array('deep'=>TRUE));
Вы должны иметь ** Книга hasMany комментарий **. У вас есть ** Книга HABTM Comment **. – AgRizzo
Можете ли вы показать код, в котором вы пытаетесь сохранить данные и структуру массива, который вы сохраняете? – GatorGuy023
Я пробовал оба saveAll, saveAssociated, но не повезло. – pt0