首页 文章

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

提问于
浏览
2

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

DB: 2 tables: artists(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));

发生的事情是只有麦当娜被保存在 artists 表中,两个相关艺术家没有保存,并且没有任何内容保存在连接表中 .

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

2 回答

  • 2

    据我所知 related artist 必须包含 Related 具有键 Relatedartist_id 的对象 . 这是一个例子:

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

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

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

相关问题