繁体   English   中英

将HABTM关联数据保存在cakephp中

[英]Saving HABTM associated data in cakephp

我有一点问题。 我的商品模型具有Has并与User模型属于许多关联。 在数据库中,它们通过commodities_users _用户表关联。 因此,我希望Cakephp在创建新commodities_users在DB的goods_users表中创建新记录。 但这是行不通的。 我的$this->request->data数组(当我想保存一种新商品时)如下所示

array(
    'Commodity' => array(
        'commodity_type' => '0',
        'commoditygroup_id' => '',
        'name' => 'asdfad',
        'code' => '',
        'ean' => '',
        'costprice' => '',
        'saleprice' => '12512,123',
        'default_vatrate' => '',
        'saleprice_gross' => '',
        'sync_cashconnector' => '1',
        'commoditysetting_id' => '',
        'default_amount_enabled' => '0',
        'default_amount' => '',
        'stock_min' => '',
        'stock' => '',
        'comment' => ''
    ),
    'User' => array(
        (int) 0 => array(
            'id' => '23'
        ),
        (int) 1 => array(
            'id' => '24'
        ),
        (int) 2 => array(
            'id' => '30'
        ),
        (int) 3 => array(
            'id' => '31'
         )
));

我这样保存商品模型$this->Commodity->saveAll($this->request->data);

我的cakePhp版本是2.4。 关系是

var $hasAndBelongsToMany = array(
            'User' => array(
                    'className' => 'User',
                    'joinTable' => 'commodities_users',
                    'foreignKey' => 'commodity_id',
                    'associationForeignKey' => 'user_id',
            ),
    );

我究竟做错了什么 ?

您没有将正确的数据输入saveAll()

根据CakePHP文档,构造数据的正确方法如下:

array(
    array(
        'Commodity' => array(
            'commodity_type' => '0',
            'commoditygroup_id' => '',
            'name' => 'asdfad',
            'code' => '',
            'ean' => '',
            'costprice' => '',
            'saleprice' => '12512,123',
            'default_vatrate' => '',
            'saleprice_gross' => '',
            'sync_cashconnector' => '1',
            'commoditysetting_id' => '',
            'default_amount_enabled' => '0',
            'default_amount' => '',
            'stock_min' => '',
            'stock' => '',
            'comment' => ''
        ),
        'User' => array(
            'User' => array('23','24','30','31')
        )
    )
);

然后,使用以下命令保存数据:

$this->Commodity->saveAll($this->request->data, array('deep' => true)) 

有关更多参考,请参见

好吧,我自己解决了。 我真傻,只是在商品模型中写了HABTM协会。 为用户模型添加相同功能可解决此问题。 $this->reuqest->data数组看起来像

array(
    'Commodity' => array(
        'commodity_type' => '0',
        'commoditygroup_id' => '',
        'name' => 'asdfad',
        'code' => '',
        'ean' => '',
        'costprice' => '',
        'saleprice' => '12512,123',
        'default_vatrate' => '',
        'saleprice_gross' => '',
        'sync_cashconnector' => '1',
        'commoditysetting_id' => '',
        'default_amount_enabled' => '0',
        'default_amount' => '',
        'stock_min' => '',
        'stock' => '',
        'comment' => ''
    ),
    'User' => array(
        'id' => array(
            '0' => '23',
            '1' => '24',
            '2' => '25'

));

谢谢你的时间!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM