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

Hao*_*Hao 1 cakephp cakephp-2.1

我希望创建并保存相关数据像什么,我有属于关联的数据一样 - 相关数据动态创建,也产生对外ID和一个函数调用来白水或saveAssocated具有交易保存在内置飞在.

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

似乎我无法通过在User上使用单个saveAll($ data)来保存User $数据

Array(
    'name' => 'Jack',
    'email' => 'jack@abc.com',
    'Comment' => array(
         array(
            'title' => 'I like this article.'
         )
    )
)
Run Code Online (Sandbox Code Playgroud)

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

如果是这种情况,因为在创建之前我没有用户ID,似乎我需要编码才能让SAVE发生两次.

我真的觉得我错过了什么.这样做应该有一种CAKE方式.

ndm*_*ndm 5

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

array
(
    'User' => array(),
    'Comment' => array()
)
Run Code Online (Sandbox Code Playgroud)

另请注意

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.'
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

也可以看看