programing

원칙 2에서 마지막 삽입 ID를 얻으시겠습니까?

goodsources 2022. 11. 19. 11:35
반응형

원칙 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

반응형