CakePHP如何在不知道一个saveAll中的外键的情况下创建hasMany数据?

时间:2012-10-29 03:59:21

标签: cakephp cakephp-2.1

我希望创建和保存关联数据,就像我对belongsTo数据所做的那样 - 关联数据是即时创建的,外部ID也是通过一次调用saveAll或saveAssocated生成并保存的。事务内置。

但对于hasMany关系中的数据似乎并非如此。以用户和评论为例。注释具有user_id作为外键。

似乎我无法通过在用户

上使用单个saveAll($ data)来保存User $数据
Array(
    'name' => 'Jack',
    'email' => 'jack@abc.com',
    'Comment' => array(
         array(
            'title' => 'I like this article.'
         )
    )
)

我读了一些文档。似乎我需要提到user_id作为正确创建的Comment数据的外键。

如果是这样的话,因为在创建之前我没有用户ID,似乎我需要编码以让SAVE发生两次。

我真的觉得我错过了什么。应该有一种CAKE方式来做到这一点。

1 个答案:

答案 0 :(得分:5)

只要您遵循约定并相应地格式化数据,这将由Cake自动完成。对于hasMany关联,需要在同一级别的字符串键上设置主要模型数据和关联的模型数据,例如

array
(
    'User' => array(),
    'Comment' => array()
)

另请注意

  

saveAll函数只是saveMany和。的包装器   saveAssociated方法。它会检查数据并确定什么   它应该执行的保存类型。如果数据以数字格式化   索引数组,saveMany将被调用,否则saveAssociated是   使用

     

此函数接收与前两个相同的选项,并且是   通常是向后兼容的功能。建议使用   根据具体情况,saveMany或saveAssociated。

所以要么会这样做。

长话短说,模型数据需要通过字符串键分隔和索引,它与find()调用返回它的格式基本相同。这样,Cake就会知道它需要保存相关数据,并会自动插入Comment记录的外键。

array
(
    'User' => array
    (
        'name' => 'Jack',
        'email' => 'jack@abc.com'
    ),
    'Comment' => array
    (
        array
        (
            'title' => 'I like this article.'
        )
    )
)

另见