I m使用Cake 1.2.6, 昨天晚上,我注意到,当我提交表格时,HABTM关系就得到拯救。
我在Committee
和Volunteer
之间建立了一个HABTM关系。一个Volunteer
的主键是UUID,而一个Committee
的主键是可读的字符串(例如BOARDOFDIRECTORS
、FAIRCOMMITTEE
、FAIRASSOCIATES
等)。我有一个表单来创建/编辑志愿者,该表单包括一个选择框,其选项与您所期望的完全相同,并且由从Cake的find(列表)
方法返回的选项填充。虽然我想不出有什么理由能影响,但是一个志愿者只能选择一个委员会(HABTM是为了未来预期需要)。
初始结果显示选择BOARDOFDIRECTORS
选项按预期工作,但其他选项不起作用。跟踪执行核心代码导致我到Model->__saveMulti()
,在第1393行,执行此代码:
$data[$this->hasAndBelongsToMany[$assoc][ foreignKey ]] = $id;
如果在此代码之前转储$data
,输出结果为FAIRASSOCIATES。紧接着,它的值变成了4AIRASSOCIATES。看起来可以安全地假设这就是关系没有被保存的原因,但我还没有弄清楚为什么执行到这一点时数据会发生变化。
有没有其他人看到了这个?我错过了关键的部分吗?据我所知,这在v1.2.1版本中运行良好(我大约一周前升级了)。
更新
我看到的第一个明显奇怪之处是,尽管我的$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
可能的问题:
- I m not sure how/why Cake is trying to set the
volunteer_id
member on a string - "FAIRASSOCIATES" is the ID of a committee to which a volunteer is grouped, not a model of any sort, so I don t understand the relevance of
FAIRASSOCIATES[volunteer_id]
at all. - I have no idea how or why the value of
$data
is being morphed into4AIRASSOCIATES
by that one line of code.