원칙 2에서 마지막 삽입 ID를 얻으시겠습니까?
어떻게 하면 교리2 ORM의 마지막 삽입 ID를 얻을 수 있을까요?교리의 문서에는 없는 내용인데, 이게 가능합니까?
마지막 삽입 ID를 얻기 위해 플러시 후 이 ID를 사용해야 했습니다.
$em->persist($user);
$em->flush();
$user->getId();
엔티티 매니저의 persist 메서드와 flush 메서드를 호출한 후 ID에 액세스할 수 있습니다.
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
이 ID를 얻으려면 플러시를 호출해야 합니다.
엔티티가 아닌 Native SQL을 사용하는 경우 다음과 같이 마지막으로 삽입된 ID를 얻을 수 있습니다.
$entityManager->getConnection()->lastInsertId()
Postgre와 같은 시퀀스를 가진 데이터베이스의 경우SQL의 첫 번째 파라미터로 시퀀스 이름을 지정할 수 있습니다.lastInsertId
방법.
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
상세한 것에 대하여는, 여기와 여기의 GitHub 의 코드를 봐 주세요.
flash()를 호출하면 새로운 엔티티가 많이 추가될 수 있으므로 "last Insert Id"라는 개념은 실제로 존재하지 않습니다.단, Authin은 ID 필드가 생성될 때마다 ID 필드를 채우므로 플러시를 호출한 후 ID 필드에 액세스하면 항상 새로운 "지속적" 엔티티의 ID가 포함됩니다.
질문에 답하기엔 좀 늦었네요.그렇지만,
MySQL 데이터베이스인 경우
할까$doctrine_record_object->id
효과가 있다AUTO_INCREMENT
는 데이터베이스 및 테이블 정의에 정의되어 있습니다.
제 경우 $id를 private로 선언했기 때문에 그것을 얻기 위해 새로운 퍼블릭 메서드를 만들었습니다.
public function getId() {
return $this->id;
}
그래서 이렇게 부를 수 있어요.
$user = new User();
$user->setUsername("Kylo Ren");
$entityManager = getEntityManager();
$entityManager->persist($user);
$entityManager->flush();
echo "Created User with ID " . $user->getId() . "\n";
이 솔루션을 찾기 위해 하루 근무일을 무리하게 보낸 후 코드를 올립니다.
마지막으로 저장된 레코드를 가져오는 함수:
private function getLastId($query) {
$conn = $this->getDoctrine()->getConnection();
$stmt = $conn->prepare($query);
$stmt->execute();
$lastId = $stmt->fetch()['id'];
return $lastId;
}
위의 함수를 호출하는 다른 함수
private function clientNum() {
$lastId = $this->getLastId("SELECT id FROM client ORDER BY id DESC LIMIT 1");
$noClient = 'C' . sprintf("%06d", $lastId + 1); // C000002 if the last record ID is 1
return $noClient;
}
심플화:SELECT max(id) FROM client
언급URL : https://stackoverflow.com/questions/3509350/get-the-last-insert-id-with-doctrine-2
'programing' 카테고리의 다른 글
mysql 덤프 및 가져오기 속도 향상 (0) | 2022.11.19 |
---|---|
mysql-maria 개선을 위한 mysqlTurner 팁DB (0) | 2022.11.19 |
MySQL에서 FULL OUTER JOIN 구문 오류가 보고되는 이유는 무엇입니까? (0) | 2022.11.19 |
Java 소스 파일을 생성하는 Java API (0) | 2022.11.19 |
Java 유형 삭제의 이점은 무엇입니까? (0) | 2022.11.10 |