1

我希望创建和保存关联数据,就像我对 belongsTo 数据所做的一样 - 关联数据是即时创建的,并且还通过一次调用 saveAll 或 saveAsocated 生成并动态保存外部 ID,其中内置了事务-在。

但对于 hasMany 关系中的数据,情况似乎并非如此。以用户和评论为例。评论将 user_id 作为外键。

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

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

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

如果是这种情况,由于在创建之前我没有用户 ID,看来我需要编写代码让 SAVE 发生两次。

我真的认为我错过了一些东西。应该有一个蛋糕的方式来做到这一点。

4

1 回答 1

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.'
        )
    )
)

也可以看看

于 2012-10-29T08:39:15.413 回答