2013-11-21 1 views
0

저는 Laravel 3을 사용하고 있습니다. 저는 폼과 2 개의 테이블을 가지고 있습니다. 한 테이블에 AUTO INCREMENT ID가 있으며이 ID를 두 번째 테이블에 제공하려고합니다. 예.업로드 할 레코드의 ID (자동 증가)를 얻는 방법은 무엇입니까?

ID : 자동 증가
제목 :

텍스트 :

날짜 :

표 2

ID : 자동 증가 t1_ID : table1-> ID

텍스트 :

어떻게 든 가능합니까? table1에서 마지막 레코드의 ID를 얻고 컨트롤러에 1을 더할 수 있다고 생각합니다. 그러나 더 쉬운 방법이있을 것입니다.

+0

코드를 여기에 게시하십시오. – George

+0

D 테이블 A에 삽입하기 전에 ID를 전달 하시겠습니까? – Stoleg

+2

마지막 ID + 1을 예상하지 말고 autoincremented 열과 함께 table1에 레코드를 삽입하고 해당 삽입에 사용 된 마지막 ID를 가져온 다음 검색된 자동 증가 값 –

답변

0

해결책 # 1

트리거를 사용해야하는 것 같습니다. 안전을 위해 INSERT 중에 예기치 않은 오류가 발생할 경우 autoincrement가 두 번 이상 증가하는지 예측할 수 없기 때문에 AFTER INSERT 트리거를 사용해야합니다. ID가 table1에서 실제 사용되고있는 것을 알고,

DELIMITER $$ 
CREATE TRIGGER table1_ai AFTER INSERT ON table1 FOR EACH ROW 
BEGIN 
    INSERT INTO table2 (t1_ID) VALUES (NEW.ID); 
END; $$ 
DELIMITER ; 

그 방법의 ID가 안전하게 table2에 배치됩니다 :

아마도 트리거는 다음과 같이 보일 것입니다.

솔루션 # 2

당신은 INFORMATION_SCHEMA를 사용하여 ID를 검색 할 수 있습니다. 방법?

테이블이 mydb.table1이라고 가정합니다. mydb.table1 경험을 높은 볼륨이 트리거를 구현하기 때문에,

는 에필로그

당신은 SOLUTION #1으로 가야 쓰는 경우

SELECT auto_increment FROM information_schema.tables 
WHERE table_schema='mydb' and table_name='table1'; 

이 검색 할 위험 할 수 있습니다 : 당신은 신속과 같이 다음 AUTO_INCREMENT 값을 얻을 수 있습니다 코드를 작성하지 않고 두 테이블에서 ID 배치를 처리합니다.

+0

더 중요한 것은 트리거는 행이 테이블 B에 삽입되는 동안 자동 증가 값이 변경되지 않을 것이라는 점을 보장합니다. – Stoleg

관련 문제