2012-11-02 82 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' 
     ) 
    ) 
);