2014-06-13 124 views
0

我需要幫助,在CakePHP中創建3個表之間的正確關係。它們是:CakePHP中的表之間的關係

  1. 用戶 - PK = USER_ID
  2. 書籍 - PK = book_id
  3. books_users

我試圖讓我的users_books表包含所有的關係是什麼之間本書屬於什麼用戶,反之亦然,如:

ID | user_id | book_id 
-------------------------- 
1  321   231 
2  24   58 
3  80   58 
4  24   75 
5  80   231 

我的做法是做一個hasAndBelongsToMany-關係,bu t在添加新書時,users_books-table不會填充任何信息。

在我的控制器中,我嘗試了saveAll()和saveAssociated()方法,但沒有任何效果。

任何人都可以幫助我在我的模型中放置什麼關聯代碼來完成這項工作?

public function addBook() { 
    $this->Book->create(); 

    $this->request->data['Book']['book_user_id'] = $this->Auth->user('user_id'); 
    $data = $this->request->data['Book']; 

    if (!$data['book_img']['name']) { 
     unset($data['book_img']); 
    } 

    if ($this->Book->saveAll($data)) { 
     $this->Session->setFlash(__('The book has been saved.')); 
     return $this->redirect(array('action' => 'index')); 
    } else { 
     $this->Session->setFlash(__('The book could not be saved. Please, try again.')); 
    } 
} 

的新的數組:

$test = array('User' => $this->Auth->user('user_id'), 'Book' => $data); 
pr($test); 

輸出此:

Array 
(
[User] => 4 
[Book] => Array 
    (
     [book_study_id] => ha_fil 
     [book_title] => The title 
     [book_price] => 123 
     [book_isbn] => 123 
     [book_user_id] => 4 
    ) 

在預先感謝的Jesper。

+0

把你的'視圖'和'控制器'代碼也 –

+0

@Anilkumar我已經添加了我的控制器動作的外觀,但它與我的視圖是如何相關的? –

+0

[文檔](http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm)... **表名按字母順序排列*按照慣例* 。可以在關聯定義中定義自定義表名。** – Nunser

回答

1

你跟HABTM相當混亂......

請參考the docs當你有疑問。

在有你有保存的陣列應該如何

Array 
(
    [Recipe] => Array 
     (
      [id] => 42 
     ) 
    [Tag] => Array 
     (
      [name] => Italian 
     ) 
) 

所以,改變着你想要做的一個例子,你需要保存這個數組...

Array 
(
    [User] => Array 
     (
      [id] => $this->Auth->user('user_id') 
     ) 
    [Book] => Array 
     (
      [name] => book, 
      /* your other book stuff */ 
     ) 
) 

並做一個簡單的$this->save($suggestedBySOArray)來保存關係。

如果您需要更多示例,鏈接到文檔有更多關於如何將數據保存到HABTM的示例。

編輯:

我會添加更多的代碼,以幫助您在正確的道路上。現在,我假設東西*在這個例子中,因爲你的問題沒有說:
1)你是創建一本新書,不更新現有用戶與現有書籍之間的關係。
2)你只是添加一本書,沒有多少

$this->Book->create(); 

//what did you intent to do with this piece of code btw? you don't have a "book_user_id" column anywhere 
//$this->request->data['Book']['book_user_id'] = $this->Auth->user('user_id'); 

$data = $this->request->data; 

if (!$data['Book']['book_img']['name']) { 
    unset($data['Book']['book_img']); 
} 

$data['User']['id'] = $this->Auth->user('user_id'); 

if ($this->Book->save($data)) { 
    $this->Session->setFlash(__('The book has been saved.')); 
    return $this->redirect(array('action' => 'index')); 
} else { 
    $this->Session->setFlash(__('The book could not be saved. Please, try again.')); 
} 

這應該做到這一點。

現在請閱讀文檔瞭解更多信息,它包含示例和所有內容。另外,如果@Anilkumar懷疑什麼是正確的(「你正試圖爲一個用戶添加書籍」),那麼就用hasMany而不是HABTM。

+0

你能幫我創建這個數組。我似乎無法控制它:( –

+0

如何:$ test = array('User'=> $ this-> Auth-> user('user_id'),'Book'=> $ data); –

+0

否記錄在books_users仍然:( –