CakePHP:在HABTM中保存数据的正确格式是什么

时间:2012-11-02 11:05:52

标签: php mysql cakephp cakephp-2.0 has-and-belongs-to-many

我有一位艺术家拥有并且属于许多相关艺术家,在这个例子中我想将麦当娜和她的2位相关艺术家Cher和Kylie Minogue保存在数据库中。

DB: 2个表:艺术家(id,name,created)和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));

只有Madonna保存在艺术家表中,两位相关艺术家都没有保存,连接表中没有保存任何内容。

如何格式化数据数组以实现此目的?或者我需要保存第一个麦当娜,并获取ID,然后将所有相关艺术家保存在另一个saveAll()?

2 个答案:

答案 0 :(得分:2)

据我所知,相关艺术家必须包含相关对象,其中包含相关 artist_id 。这是一个例子:

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

答案 1 :(得分:0)

您的数据必须采用此格式。

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