2011-07-31 32 views
2

我目前在我的模型中使用RedBean作为ORM。ORM(RedBean)和重复键

我需要将数据插入到其中一列设置为唯一的MySQL表中。

目前,数据通过形式插入,像这样:

//Create 
$object = R::dispense('object'); 

//Need to check if supplied name is a duplicate 
$object->name = $name 
$object->description = $description 

//Save 
R::store($object) 

现在的问题是,如果$名字没有在数据库中复制,一切顺利。如果是重复的,我可以捕获该异常,并得到了SQL错误代码:23000

如果我赞同例外,我得到:

[23000] - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'abc' for key 'name_UNIQUE' 

的另一个问题是,如果我有多个字段其设置为UNIQUE,异常只会告诉我重复的第一个字段。因此,为了获得下一个字段,我需要确保用户更正第一个副本并再次运行查询。

这似乎相当低效。我需要能够检查用户是否在不执行太多SQL语句的情况下在多个字段中插入重复数据。

这样做的最佳做法是什么?另外,当回到行动是否成功时,或者如果失败,为什么和哪些字段返回给控制器,最佳做法是什么?

谢谢:)

回答

0

您必须先执行“选择”,以检查独特的条目已经不存在,也没有其他办法...如果你不想执行从您的多个请求代码,你可以实现一个存储过程。

它允许您在同一事务中执行多个请求,并限制网络开销。

它也可以让你管理多种错误(通过错误代码AFAIR),这将给你一种方式来清楚地识别有问题的领域。

退房this link

希望帮助!