5
respostas

Gostaria de saber como pegar o id criado depois de executar o flush?

Exemplo:

$aluno = new Aluno();
$aluno->setNome('Eduardo');
$em->persist($aluno);
$em->flush();

$id = $aluno->getId();
5 respostas

Olá, Eduardo.

Após exeuctar o flush, a propriedade anotada com @Id na sua entidade é preenchida "autogicamente" pelo Doctrine.

Bem, no meu caso isso não acontece, após salvar o objeto não consigo obter o id do registro criado mesmo na minha entidade estando com a anotação @Id, pode colocar um exemplo? Obrigado!

Fala, Eduardo. Compartilha seu código rapidinho pra eu entender como você tá fazendo?

Então, abaixo segue um pequeno trecho, por motivo de confidencialidade não posso colocar o código na integra.


$this->em->getConnection()->beginTransaction();

$inscricao = new Inscricao();
$inscricao->setSituacao("I");

$this->em->persist($inscricao);
$this->em->flush();
$this->em->commit();

$idInscricao = $inscricao->getId();

Abaixo segue o codigo da minha entity inscricao

<?php

namespace PCN\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Inscricao
 *
 * @ORM\Table(name="NOME_DA_TABELA")
 * @ORM\Entity
 */
class Inscricao implements \JsonSerializable
{
 /**
     * @var integer
     *
     * @ORM\Column(name="ID_INSCRICAO", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="NOME_DATA_SEQUENCE", allocationSize=1, initialValue=1)
     */
    private $id;
}

Fala, Eduardo.

Você não precisa abrir a transação explicitamente. Pode tirar o beginTransaction e o commit.

A sequence que você está usando existe no banco? Pois nós não utilizamos essa estratégia no treinamento.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software