Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

OneToOne nullable "Cannot be null", cas d'école ...

$
0
0

Bonjour à tous,

Voila je rencontre un problème avec mon code et je ne parviens pas à le résoudre.
Je suis allé sur différents forums (StackOverflow, OpenClassRoom) ainsi que sur le chat Symfony. Tous me font plus ou moins tourner en bourrique lol, au point ou j'en viens à me persuader que ce que j'essaie de faire est exceptionnel.

Je souhaite simplement avoir deux entités bidirectionnelles liées, l'une (Action) étant nullable car elle regroupe d'autres entités jointes.

Ce que je fais

Voici mon code, que j'ai simplifié pour la compréhension :

Entité User :

class User
{
    /**
     * @var Action
     *
     * @ORM\OneToOne(targetEntity="AppBundle\Entity\Action", inversedBy="userRegister", cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    protected $action;

    public function getAction()
    {
        return $this->action;
    }

    public function setAction(Action $action)
    {
        $action->setUserRegister($this);
        $this->action = $action;
    }
}

Entité Action, la relation étant nullable :

class Action
{
    /**
     * @var User
     *
     * @ORM\OneToOne(targetEntity="AppBundle\Entity\User", mappedBy="action")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $userRegister;

    public function getUserRegister()
    {
        return $this->userRegister;
    }

    public function setUserRegister(User $userRegister)
    {
        $this->userRegister = $userRegister;
    }
}

Le controlleur :

    $user = new User();
    $user->setAction(new Action());
    $manager->persist($user);
    $manager->flush();

Mais j'obtiens toujours l'erreur "SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'action_id' ne peut être vide (null)".

Sur les différents forum, on m'a dit que ce code de toutes façons ne pourrait jamais fonctionner, sans explication ... parfois on m'a dit de persister action() et effectivement ça fonctionne (j'avais déjà essayé) mais quand je demande pourquoi je dois le faire alors qu'il y a un "cascade persist" je n'ai pas de réponse, parfois on me dit de tout mettre à nullable, etc ...

En d'autres termes et vous l'aurez compris je pense, je suis un peu lassé par la multitude de réponses imprécises (dont 90% de fonctionnent) pour un cas qui a mes yeux semblent vraiment "Cas d'école basique", limite "On ne peut pas plus basique avec Doctrine". ^^

Alors si quelqu'un peut m'aider ici ce serait sympatique :)
Merci d'avance


Viewing all articles
Browse latest Browse all 1542

Trending Articles