Symfony Ненулевое нарушение: 7 ОШИБКА: нулевое значение в столбце «id» - PullRequest
0 голосов
/ 03 августа 2020

Я получаю эту ошибку при попытке создать новую сущность с именем «Nuclei». Это класс сущности:

/**
 * Nuclei
 *
 * @ORM\Table(name="datinuclei")
 * @ORM\Entity(repositoryClass="App\Repository\NucleiRepository")
 */
class Nuclei
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="datinuclei_id_seq", allocationSize=1, initialValue=1)
     */
    private $id;

    /**
    * @var NucleiStatistiche
    *
    * @ORM\OneToOne(targetEntity="NucleiStatistiche")
    * @ORM\JoinColumn(name="id", referencedColumnName="id")
    */
    private $statistiche;

Изменить: NucleiStatistiche является материализованным представлением (не может вставлять строки) определено в сущности NucleiStatistiche

    class NucleiStatistiche
    {
        /**
         * @var int
         *
         * @ORM\Id
         * @ORM\Column(name="id", type="integer")
         * @ORM\GeneratedValue(strategy="NONE")
         */
        private $id;


        /**
         * @var string
         *
         * @ORM\Column(name="totale_conferimenti", type="integer", nullable=false)
         */
        private $totale_conferimenti;

PostgreSQL определение схемы таблицы

CREATE TABLE public.datinuclei
(
    id integer NOT NULL DEFAULT nextval('datinuclei_id_seq'::regclass),
    idcomune integer NOT NULL,
    cognome character varying COLLATE pg_catalog."default",
    nome character varying COLLATE pg_catalog."default",
    CONSTRAINT datinuclei_pkey PRIMARY KEY (id),
    CONSTRAINT datinuclei_codicenucleo UNIQUE (codicenucleo)
)

ошибка выброса

An exception occurred while executing 'INSERT INTO datinuclei (id, tiponucleo, codicenucleo, nome, cognome, codicefiscale, ncomponenti, indirizzoutenza, civico, mail, telefono, cellulare, proprietario, foglio, particella, sub, categoria, idcomune) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, 1, "abcdefgi123", "wefqwe", "fqweff", "qwefqew", 23, "awefq", "2", "qweff@\u00e6we.it", "1234123", "1234123", null, "63", "3", null, null, 3]:

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, 3, fqweff, wefqwe, 23, 1234123, 1234123, qweff@æwe.it, qwefqew, abcdefgi123, 1, f, f, null, awefq, 2, 0, null, 63, 3, null, null). 

контроллер, на котором я сохраняю данные

    if ($form->isSubmitted()) {
        if ($form->isValid()) {

            $nucleo = $form->getData();
            $nucleo->setCodiceNucleo('abcdefgi123');

            dump($nucleo);
            $em->persist($nucleo);
            $em->flush();

            $this->addFlash('success', 'Nucleo modificato correttamente');

            //return $this->redirectToRoute('admin_article_list');
        }else {
            $this->addFlash('danger', 'Dati non validi');
        }
    }

Я пытаюсь использовать @ORM\GeneratedValue(strategy="SEQUENCE") и IDENTITY в столбце ID, но такая же ошибка сохраняется, кто-нибудь?

Изменить: После некоторых тестов я понял проблема связана с Nucleistatistiche OneToOne отношения, но я не знаю, как решить

1 Ответ

0 голосов
/ 03 августа 2020

Ваша проблема - это аннотации поля id, я думаю:

"nullable = false"

Это означает, что ваш идентификатор не может быть нулевым, и вы пытаетесь опубликуйте нулевое значение как id.

Попробуйте заменить аннотации на:

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */

Когда вы генерируете свой класс сущности с Doctrine, это аннотации по умолчанию, и они отлично работают.

Надеюсь, это достаточно ясно.

...