【问题标题】:CakePHP: What is the correct format for saving data in a HABTMCakePHP:在 HABTM 中保存数据的正确格式是什么
【发布时间】:2012-11-02 11:05:51
【问题描述】:

我有一位艺术家拥有并属于许多相关艺术家,在此示例中,我想将 Madonna 和她的 2 位相关艺术家 Cher 和 Kylie Minogue 保存在数据库中。

数据库: 2 个表: 艺术家(id、name、created)和艺术家相关(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 表中只保存了 Madonna,两个相关的艺术家没有保存,连接表中没有保存任何内容。

应如何格式化数据数组以完成此操作?还是我需要先保存麦当娜,然后获取 id,然后将所有相关艺术家保存在不同的 saveAll() 中?

【问题讨论】:

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


    【解决方案1】:

    据我所知,related 艺术家 必须包含 Related 对象,该对象具有关键 Related 和一些 artist_id。这是一个例子:

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

    【讨论】:

      【解决方案2】:

      您的数据必须采用这种格式。

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

      【讨论】:

      • 我不这么认为:book.cakephp.org/2.0/en/models/…
      • 感谢您的回答。这看起来很奇怪,但我还是试过了。结果是 Madonna 被插入到 artists 表中两次。 Kylie 和 Cher 没有,连接表中没有插入任何内容。
      • 您是否有主键 ID,如果有,必须包含这些。
      • 没有主键 id,因为这些都没有被保存过。我一直在玩的另一个选择是先保存麦当娜,获取 id,然后保存所有相关的艺术家。
      猜你喜欢
      • 2011-09-14
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多