2011-07-31 4 views
2

현재 모델에서 ORM에 대해 RedBean을 사용하고 있습니다.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

희망!