在 HABTM 的情况下,CakePHP 不会保存正确的数据

Posted

技术标签:

【中文标题】在 HABTM 的情况下,CakePHP 不会保存正确的数据【英文标题】:CakePHP doesn't save correct data in case of an HABTM 【发布时间】:2014-02-19 14:17:56 【问题描述】:

我正在尝试使用 HasAndBelongsToMany 关系保存一些数据。 这是我的桌子:

广告:

id (int) AI 名称(varchar)

展厅:

id (int) AI 名称(varchar)

commercials_showrooms:

id (int) AI commercial_id (int) showroom_id (int)

还有我的模型:

class Showroom extends AppModel

    public $hasAndBelongsToMany = array(
        'Commercial',
    );


class Commercial extends AppModel

    public $hasAndBelongsToMany = array(
        'Showroom'
    );

我正在尝试以这种方式保存数据(目前是硬编码):

 $this->loadModel('Showroom');
 $this->Showroom->saveAll(array(
             'Showroom' => array(
                 'id' => 1
             ),
             'Commercial' => array(
                 'name' => 'test'
             )
         ));

saveAll() 返回 (bool)true,但是,数据库中没有保存任何内容。 我该如何解决这个问题?

【问题讨论】:

尝试保存array(array( 'Showroom' => array( 'id' => 1 ), 'Commercial' => array( 'name' => 'test' ) ))。另外,你的蛋糕版本是什么?并且:您是否收到验证错误(您是否尝试在保存前进行验证)? 我试过了,这不起作用。我正在使用 Cakephp 2.4.1 我要保存的模型没有验证。 您测试它的方式也不正确。 你能说得更准确些吗? 【参考方案1】:

您是否阅读了"Saving Related Model Data (HABTM)" in the CakePHP book 上的部分?

它建议的格式与您用于数据的格式不同。

【讨论】:

我看不出有什么不同。 不同之处在于额外的环绕数组,就像我说的你应该尝试的那样。但是你说那也没用。它至少给你带来了不同的错误吗? @dynamic_cast:不要只使用您看到的第一个示例 - 请阅读“您还可以使用此格式保存多个记录及其与 saveAll() 的 HABTM 关联...”的部分 正如@Nunser 所说,它也不起作用。而且问题根本没有改变,数据库没有任何改变。【参考方案2】:

要测试您的表是否正常工作,请在您的控制器中尝试:

$this->loadModel('CommercialsShowroom');

$CommercialsShowroom = array('CommercialsShowroom'=>array(
                                                          'commercial_id'=>your_value,
                                                          'showroom_id'=>your_value));
$this->CommercialsShowroom->create();
if ($this->CommercialsShowroom->save($CommercialsShowroom, false))
    var_dump('It is saved');

对于模型配置,请阅读 Dave 链接了解更多信息

//CommercialsShowroom model:

        var $belongsTo = array(
        'Commercial' => array(
            'className' => 'Commercial',
            'foreignKey' => 'commercial_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Showroom' => array(
            'className' => 'Showroom',
            'foreignKey' => 'showroom_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

//Showroom model:

     var $hasAndBelongsToMany = array(
        'Commercial' => array(
            'className' => 'Commercial',
            'joinTable' => 'commercials_showrooms',
            'foreignKey' => 'commercial_id',
            'associationForeignKey' => 'showroom_id',
            'unique' => true,
        )
    );

//Commercial model:

     var $hasAndBelongsToMany = array(
        'Showroom' => array(
            'className' => 'Showroom',
            'joinTable' => 'commercials_showrooms',
            'foreignKey' => 'showroom_id',
            'associationForeignKey' => 'commercial_id',
            'unique' => true,
        )
    );

【讨论】:

以上是关于在 HABTM 的情况下,CakePHP 不会保存正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP HABTM 关系保存新的关联

HABTM 关联未保存 - cakephp

CakePHP 2.5 habtm 不保存

在 CakePHP 中使用 HABTM 保存 hasOne

CakePHP 在 HABTM 表中保存数据

CakePHP 和 HABTM 插入/保存不起作用