records,Cakephp: findAll query return duplicated records

当Model之间的关系没有定义正确时,在cakephp中调用关联查询可能会导致冗余数据。
比如在Model:Deal中定义了hasone:Deal hasone Detail,
但是Detail的表定义中没有为Detail.deal_id设置相应的index和外键关联,而且没有把Detail.deal_id设置成unique的字段。
那么当程序逻辑出现错误,在Detail表格中对同一个Deal保存了多条数据时,这时CakePHP对数据的联合查询处理将处于混乱的状态。
$this->Deal->find('all',...) 查询结果将返回多条冗余记录。这里findAll在CakePHP中默认查询所有关联数据。除非设置recursive=-1。
解决方法是去除Detail表格中的冗余数据并设置好Detail和Deal表格之间的外键关联以及Detail.deal_id字段的唯一性属性。
Tags:  records

延伸阅读

最新评论

发表评论