Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Quando uso #[GeneratedValue] gera erro de Integrity Constraint Violation

Erro de SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: Student.id

Código do arquivo insert-student.php

<?php

use Alura\Doctrine\Entity\Student; use Alura\Doctrine\Helper\EntityManagerCreator;

require_once DIR . '/../vendor/autoload.php';

$entityManager = EntityManagerCreator::createEntityManger();

$student = new Student(name: 'Fulano'); $entityManager->persist($student);

//Mandar tudo que o entityManager está monitorando e envio de uma vez para o banco $entityManager->flush();

código da entidade <?php

namespace Alura\Doctrine\Entity;

use Doctrine\ORM\Mapping\Column; use Doctrine\ORM\Mapping\Entity; use Doctrine\ORM\Mapping\GeneratedValue; use Doctrine\ORM\Mapping\Id;

#[Entity] class Student {

#[Id]
#[GeneratedValue]
#[Column]
private int $id;

public function __construct(

    #[Column]
    public string $name
) {
}

}

2 respostas
solução!

Luciano, como o banco de dados foi criado?

Meu palpite é que o atributo GeneratedValue foi adicionado apenas após o banco ter sido criado (ou o banco foi criado sem o auxílio do Doctrine), fazendo com que ele seja um inteiro "comum", sem a geração automática de valor, entende?

Era isso mesmo, regerei o banco. Obrigado!

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