我正在使用 Cake 1.2.6,昨晚我注意到提交表单时没有保存 HABTM 关系。
Committee
我在和之间有 HABTM 关系Volunteer
。a 的主键Volunteer
是 UUID,而 a 的主键Committee
是人类可读的字符串(例如BOARDOFDIRECTORS
, FAIRCOMMITTEE
,FAIRASSOCIATES
等)。我有一个创建/编辑志愿者的表单,该表单包括一个选择框,其选项正是您所期望的,并且填充了从 Cakefind( 'list' )
方法返回的选项。虽然我想不出有什么重要的原因,但只能为志愿者选择一个委员会(HABTM 是为了满足预期的未来需求)。
初步结果表明,选择该BOARDOFDIRECTORS
选项按预期工作,但其他选项则不然。通过核心代码跟踪执行导致我Model->__saveMulti()
在第 1393 行中执行此代码:
$data[$this->hasAndBelongsToMany[$assoc]['foreignKey']] = $id;
如果我$data
在该代码之前转储,则输出为FAIRASSOCIATES。紧接着,它的值为4AIRASSOCIATES。假设这就是为什么没有保存关系似乎是安全的,但我还没有弄清楚为什么数据在执行过程中会发生变化。
有没有其他人看过这个?我错过了一些关键的部分吗?据我所知,这在 v1.2.1 中运行良好(我大约一周前升级了)。
更新
我看到的第一个明显的奇怪之处是,虽然 my$row
是一个字符串,但第 1366 行中的条件计算结果为,true
所以我进入了那个代码块。如果我的数据是一个字符串,它怎么会有一个成员值呢?
更新
我显然有一些想法要做,但这是底线。如果我在第 1394 行之前和之后立即删除日志写入,如下所示:
$this->log( 'Setting ' . $data . '[' . $this->hasAndBelongsToMany[$assoc]['foreignKey'] . '] = ' . $id, LOG_DEBUG );
$data[$this->hasAndBelongsToMany[$assoc]['foreignKey']] = $id;
$this->log( 'Creating ' . json_encode( $data ) . ' on ' . $join, LOG_DEBUG );
相关输出是:
2010-03-05 18:57:08 Debug: Setting FAIRASSOCIATES[volunteer_id] = 4b78717f-8ad4-4671-b81c-4e8745591fb4
2010-03-05 18:57:08 Debug: Creating "4AIRASSOCIATES" on CommitteesVolunteer
可能的问题:
- 我不确定 Cake 如何/为什么尝试将
volunteer_id
成员设置在字符串上 - “FAIRASSOCIATES”是志愿者所属的委员会的ID,而不是任何类型的模型,所以我根本不明白它的相关性
FAIRASSOCIATES[volunteer_id]
。 - 我不知道那一行代码是如何或为什么将 的值
$data
转变为的。4AIRASSOCIATES