0

HABTM을 사용하여 데이터베이스를 채 웁니다. 3 가지 모델이 있습니다. 사용자, 도서, 코멘트. 내가 HABTM users_books 테이블에서 사용하는 테이블 책과 사용자의 레코드에 가입하려면, 나는 모두가 외래 키로 설정이 기본 키, 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 제거 :

Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails 

그래서 나는 그것이 어느 CakePHP의 규칙에 대해 또는 내가 뭔가 잘못하고있는 중이 야 것 같다.

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)); 
+0

당신은 ** ** 예약 hasMany의 댓글이 있어야합니다. 당신은 ** 도서 HABTM 코멘트 **를 가지고 있습니다. – AgRizzo

+0

데이터를 저장하려고하는 코드와 저장하려는 배열의 구조를 표시 할 수 있습니까? – GatorGuy023

+0

saveAll, saveAssociated를 모두 시도했지만 행운이 없습니다. – pt0

답변

1

요청 데이터 배열이 올바르게 저장하려면 cakephp의 올바른 형식이 아닌 것 같습니다. 배열을 게시 할 수 있습니까? 당신은 저장() 함수 전에이 줄을 추가 할 수 있습니다

pr($this->request->data); 

이 링크를 참조하십시오 Saving HABTM

+0

'배열 ( [도서] => 배열 ( [제목] => title125 [저자] => title625 ) [사용자] => 배열 ( [ID] => 4 ) [코멘트] => 배열 ( [본체]> cm = 507 ) )' – pt0

+0

는 I 여기서 문제가 하나 개의 테이블에 mulitiple 색인 키를 생각한다. 내 생각에 – pt0

+0

문제는 모델 코멘트 안에 있습니다. 나는 그것이 조인 테이블이지만 기본 키는 comment_id와 book_id이어야하며 사용자의 참조 ID 인 user_id라는 또 다른 외래 키가 있어야합니다. 잘 이해하면 HABTM 모델을 사용할 필요는 없지만 모델에 두 개의 기본 키가 없으며 사용자의 다른 정보가 있기 때문에 Many Many Through 모델을 사용할 수 있습니다. 참조 : [link] (http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany-through-the-join-model) – Laura