我目前在我的模型中使用RedBean进行ORM。
我需要将数据插入到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)
现在的问题是如果$ name没有在数据库中重复,一切顺利。如果它是重复的,我可以捕获异常并获取SQL错误代码:23000
如果我回应异常,我得到:
[23000] - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'abc' for key 'name_UNIQUE'
另一个问题是,如果我有多个设置为UNIQUE的字段,则异常只会告诉我第一个重复的字段。因此,为了获得下一个字段,我需要确保用户更正第一个副本并再次运行查询。
这似乎效率很低。我需要能够检查用户是否在多个字段中插入了重复数据,而没有执行太多的SQL语句。
这样做的最佳做法是什么?此外,在返回操作是否成功,或者是否失败,为什么以及哪些字段返回控制器时,最佳做法是什么?
谢谢:)
答案 0 :(得分:0)
您必须首先执行“选择”以检查唯一条目是否已存在,没有其他方式...如果您不想从代码执行多个请求,则可以实现存储过程。
它允许您在同一事务中执行多个请求,这限制了网络开销。
它还允许您管理多种错误(通过错误代码AFAIR),这将为您提供一种方法来清楚地识别有问题的字段。
希望有所帮助!