Cakephp HABTM saveAll 创建错误的数据库记录

Posted

技术标签:

【中文标题】Cakephp HABTM saveAll 创建错误的数据库记录【英文标题】:Cakephp HABTM saveAll creates wrong db records 【发布时间】:2013-02-21 12:24:14 【问题描述】:

我有一个模型用户:

public $hasMany = array(
    'Contact' => array('dependent' => true));
public $hasAndBelongsToMany = array(
    'MySharepermission' => array(
        'unigue' => false,
        'className' => 'Contact',
        'joinTable' => 'sharepermissions_users',
        ));

还有模特联系方式

public $belongsTo = array('User');    
public $hasAndBelongsToMany = array(
    'Sharepermission' => array(
        'unigue' => false,
        'className' => 'User',
        'joinTable' => 'sharepermissions_users',
        )
    );

现在我有一个 $data 数组:

array(
(int) 0 => array(
    'Contact' => array(
        'id' => '51254509-0654-468b-8007-1683550d8ff8'
    ),
    'Sharepermission' => array(
        'id' => '5123a3c3-d5ac-4541-b28b-326c550d8ff8',
        'permission' => 'read'
    )
),
(int) 1 => array(
    'Contact' => array(
        'id' => '51254509-0654-468b-8007-1683550d8ff8'
    ),
    'Sharepermission' => array(
        'id' => '51252eba-8804-40e7-bf3d-7db9550d8ff8',
        'permission' => 'write'
    )
)
)

数据库目前是空的,现在我这样做了:

debug($this->Contact->saveAll($data));

结果很奇怪:

为什么会这样?

【问题讨论】:

这很奇怪,如果您使用 UUID,您绝对应该做的一件事是将外键 (*_id) 的 mysql 数据类型更改为 CHAR(32) 我一直在使用 binary(36) 作为 uuid,它就像一个魅力 公平,我只是建议,因为显然 0000 不是 UUID 可以,但是数据类型没问题。储蓄搞砸了。甚至第一行中的记录也已损坏。它应该有“写”权限 可能不会导致您的问题,但在您的示例中,您的示例中有一个关键的“unigue”(使用 g 而不是 q) HABTM 定义 【参考方案1】:

您的 Sharepermisson 模型是什么样的?

您的 Contact-habtm 关系中似乎有错误:

public $hasAndBelongsToMany = array(
    'MySharepermission' => array(
        'unigue' => false,
        'className' => 'Contact',
        'joinTable' => 'sharepermissions_cantacts',
        ));

您是否尝试过只保存联系人部分而不保存用户关系?

【讨论】:

【参考方案2】:

我看到unique这个词拼错了,应该是“unique”而不是“unigue”。或许能破案。

【讨论】:

以上是关于Cakephp HABTM saveAll 创建错误的数据库记录的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?

Cakephp saveAssociated 和 SaveAll Nothing 正常工作

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

如何将数据写入 CakePHP 中 HABTM 连接表的 HABTM 关联?

在 CakePHP 中检索 HABTM、HasMany...等数据比 -1 递归手动连接更好?

CakePHP:用户数据 saveAll 静默失败?