Cakephp 使用HABTM保存数据,并有许多外键松动

Cakephp 使用HABTM保存数据,并有许多外键松动,cakephp,model,save,has-and-belongs-to-many,Cakephp,Model,Save,Has And Belongs To Many,我有一个具有两种关系的用户模型: 哈桑德贝隆胃 public $hasAndBelongsToMany = array( 'group' => array( 'className' => 'group', 'foreignKey' => 'user_id' ) ); 有许多 public $hasMany = array( 'phonenumber' => array( 'className' => '

我有一个具有两种关系的用户模型:

  • 哈桑德贝隆胃

    public $hasAndBelongsToMany = array(
        'group' => array(
            'className' => 'group',
            'foreignKey' => 'user_id'
        )
    );
    
  • 有许多

    public $hasMany = array(
      'phonenumber' => array(
        'className' => 'phonenumber',
        'foreignKey' => 'user_id'
      )
    );
    
  • 已设置电话号码和组

    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'
        )
    );
    
    当我使用

    $this->saveAll(array(
                'User' => $data, 
                'phonenumber' => $numbers, //array with data
                'group' => $groups //array with data
       )
    );
    
    数据保存在选项卡中,但phonenumber和group表中的用户id为“0”


    如何保存正确的ID?(CakePHP v 2.5)

    考虑到CakePHP文档,您会发现以下提示:

    在使用关联模型时,重要的是要认识到 保存模型数据应始终由相应的CakePHP完成 模型如果您正在保存一篇新文章及其相关评论,则 在保存操作期间,您将同时使用Post和Comment模型 ()

    基于这些信息,我建议您尝试以下方法:

    $this->User->save($data);  // first save the user
    
    假设您有多个号码:

    foreach($numbers as $key => $nbr) {
        // set user_id related data
        $numbers[ $key ]['Phonenumber']['user_id'] = $this->User->id;
    }
    
    最后保存您的相关数据:

    $this->User->Phonenumber->saveAll($numbers);
    
    由于此代码未经测试,您可能需要进行一些调整。始终确保遵循Cake约定并使用CamelCase模型名。

    FWIW saveAll()应按广告的方式工作,一次性在子表中填充新的用户id

    您是否注意到相关选项:原子和深度

    尤其是当数据库不支持事务时,您需要传入原子:

    $this->saveAll(array(
                'User' => $data, 
                'phonenumber' => $numbers, //array with data
                'group' => $groups //array with data
       ),
       array('atomic' => false)
    );
    

    您可以添加存储在数组的$data、$numbers和$groups中的相关数据吗?它有$data=array('name'=>'Jeff','country'=>'USA')组等普通用户数据,phonenumber有array(array('number'=>'123 112')、array('number'=>'321')等数据)我不确定这是否会产生任何后果,但您的类名拼写不正确(不区分大小写)。另外:您是否尝试过设置foreignKey(user_id)在Phonenumber&Group数据中?需要澄清的是:您想添加一个新用户,并使用其自动递增的ID作为用户ID来保存Phonenumber和Group?可能您的错误在JavaScript中。