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 关联?