ZF1 Zend_Db 참조 설명서에는 트랜잭션 수행시 entire section이 있습니다.ZF2의 Zend Db는 트랜잭션을 어떻게 제어합니까?
ZF2 Zend\Db reference manual에는 트랜잭션 관련 문서가 없습니다.
ZF2에서 트랜잭션을 수행하려면 어떻게해야합니까? 예제 코드가 도움이 될 것입니다.
ZF1 Zend_Db 참조 설명서에는 트랜잭션 수행시 entire section이 있습니다.ZF2의 Zend Db는 트랜잭션을 어떻게 제어합니까?
ZF2 Zend\Db reference manual에는 트랜잭션 관련 문서가 없습니다.
ZF2에서 트랜잭션을 수행하려면 어떻게해야합니까? 예제 코드가 도움이 될 것입니다.
설명서가 누락되었습니다.
무슨 일이 있었는지 확인하려면 Zend \ Db \ Adapter의 API docs으로 들어가야했습니다.
Zend\Db\Adapter\Driver\ConnectionInterface에 정의 된대로 , rollback
및 commit
이 정의됩니다. 즉, 모든 단일 어댑터 연결에서 호출 할 수있는 메서드입니다. 불행히도 연결 자체가 오히려 묻혀 있습니다.
내가 분명하지는 않지만 현재 예제를 제공 할 수없는 것은 실제로이 메소드를 호출하는 객체를 파악하는 것입니다. 최악의 경우 $adapter->getDriver()->getConnection()->beginTransaction()
에 전화하는 것이 좋습니다.
Eww.
나는 더 많은 지식을 가진 다른 사람과 ZF2 복사본을 편리하게 볼 수 있기를 기대하며 더 나은 옵션을 제공 할 것입니다.
직접 BEGIN TRANSACTION
/ROLLBACK
/COMMIT
/SET autocommit=...
개의 SQL 문을 직접 발행 할 수 있다는 것을 잊지 마십시오. 이것은 아마도입니다. Zend \ Db는 트랜잭션 상태를 추적합니다.
당신이 가지고 있습니다. 적절한 방법은, 시작 커밋, 다음과 같이 롤백 거래되는 : 당신이 사용하는 경우
$this->getAdapter()->getDriver()->getConnection()->getLastGeneratedValue()
:
$this->getAdapter()->getDriver()->getConnection()->beginTransaction();
$this->getAdapter()->getDriver()->getConnection()->commit();
$this->getAdapter()->getDriver()->getConnection()->rollback();
그냥 너무 당신은 또한에 의해 생성 된 마지막 ID를 얻을 수있다이를 넣어 pgSQL 생성 된 마지막 ID를 반환하기 위해 시퀀스를 추가해야합니다 :
$this->getAdapter()->getDriver()->getConnection()->getLastGeneratedValue('mail_mailid_seq')
감사합니다 @Diemuzi - 이것은 정말로 유용합니다. –
위대한, 잘 설명, 많은 감사 !! ZF2 및 ZF3의 문서는이 부분에 대해 명확하지 않습니다! – evilReiko
트랜잭션을 수행 할 때 두 가지 사항이 있습니다.
1 - MyISAM은 트랜잭션 엔진이 아니기 때문에 테이블 엔진을 InnoDB로 변경한다.
2 - 트랜잭션 쿼리 ("START TRANSACTION;"
OR "ROLLBACK;"
) 연결은 다른 쿼리 (삽입 또는 업데이트)와 동일해야합니다.
ZF2에서이를 수행하려면 현재 db 어댑터를 가져와 모든 쿼리에서 사용해야합니다.
이 코드 제대로 작동하지 않습니다 : $this->getAdapter()->getDriver()->getConnection()
이후
$this->getAdapter()->getDriver()->getConnection()->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$this->getAdapter()->getDriver()->getConnection()->rollback();
새로운 DB 연결을 작성합니다.대신
를 사용하여 다음 코드를 사용자의 연결이 올바른지 확인을 위해
$connection = $this->getAdapter()->getDriver()->getConnection();
$connection->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$connection->rollback();
, 그냥 MySQL의 쿼리 로그를 할 수 있습니다.
쿼리를 실행 한 후에는 mysql 로그의 각 쿼리 앞에 연결 번호가 표시됩니다. 모든 트랜잭션 쿼리에서 동일해야합니다.
많은 분들께 감사드립니다. Charles - API를 통해 신중하게 읽고 API를 읽어야합니다. 마지막 지점에서 직접 PDO를 통해 문제를 해결해야합니다. –