2012-11-02 78 views
2

我擁有一位擁有並且屬於許多相關藝術家的藝術家,在這個例子中,我想將麥當娜和她的2位相關藝術家雪兒和凱莉米洛保存在數據庫中。CakePHP:在HABTM中保存數據的正確格式是什麼

DB: 2表:藝術家(ID,姓名,創建)和artists_related(ID,artist_id,related_id)

型號關係設置:

<?php 
class Artist extends AppModel { 
    public $hasAndBelongsToMany = array(
     'Related' => 
      array(
       'className' => 'Artist', 
       'joinTable' => 'artists_related', 
       'associationForeignKey' => 'related_id', 
       'unique' => 'keepExisting' 
      ) 
     ); 

我試圖挽救

$test_data = array(
     'Artist' => array(
      'name' => 'Madonna' 
     ), 
     'Related' => array(
      0 => array(
       'name' => 'Kylie Minogue' 
      ), 
      1 => array(
       'name' => 'Cher' 
      ) 
     ) 
    ); 

    $result = $this->saveAll($test_data, array('deep' => true)); 

什麼情況是,只有麥當娜被保存在:像這樣的數據藝術家表中,兩個相關的藝術家並沒有保存,也沒有任何內容保存在連接表中。

如何格式化數據數組來完成此操作?或者我需要保存第一個麥當娜,並獲得id,然後將所有相關藝術家保存在不同的saveAll()中?

回答

0

您的數據必須採用此格式。

Array 
(
[0] => Array 
    (
     ['Artist'] => Array 
      (
       [name] => 'Madonna' 
      ) 
     ['Related'] => Array 
      (
       [name] => 'Kylie Minogue' 
      ) 
    ) 
[1] => Array 
    (
     ['Artist'] => Array 
      (
       [name] => 'Madonna' 
      ) 
     ['Related'] => Array 
      (
       [name] => 'Cher' 
      ) 
    ) 
) 
+1

我不這麼認爲:http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null -array-options-array – 472084

+0

感謝您的回答。這看起來很奇怪,但我試過了。結果是麥當娜被插入**藝術家**表格兩次。凱莉和雪兒沒有,也沒有插入連接表。 – lasse

+0

你有主要的ID,如果是的話,那些必須包括在內。 –

2

我所知相關藝術家必須包含相關對象中具有關鍵相關一些artist_id。這是例子:

$test_data = array(
    'Artist' => array(
     'name' => 'Madonna' 
    ), 
    'Related' => array(
     'Related' => array(
      0 => '1', 
      1 => '2' 
     ) 
    ) 
);