Fixtures entre 2 entités

18 views
Skip to first unread message

inform...@gmail.com

unread,
Apr 29, 2019, 7:41:16 AM4/29/19
to Association Francophone des Utilisateurs de Symfony
Bonjour
Comment créer des data fixtures de 2 entités liées entre elles par la relation ToOneMany ? 
J'ai Facture.php et User.php. Un user peut avoir plusieurs factures.
 

J'ai cette erreur dans la console quand je tape cette commande : 
php bin/console doctrine:fixtures:load : 

 A new entity was found through the relationship 'App\Entity\Facture#user' that was not configured to cascade persist operations for entity: App\Entity\User@000000004f1c3a680000000062f0bcbd. To solve this i
  ssue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find o
  ut which entity causes the problem implement 'App\Entity\User#__toString()' to get a clue.

Voici FactureFixtures.php :
<?php


namespace App\DataFixtures;


use App\Entity\Facture;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;


class FactureFixtures extends Fixture
{
   
public function load(ObjectManager $manager)
   
{
        $user1
= new User(1, "name1", "username1", "password1", "na...@gmail.com", "Role1");
       
// create 20 factures! Bam!
       
for ($i = 0; $i < 20; $i++) {
            $facture
= new Facture();
            $facture
->setNumfacture('Numfacture '.$i);
            $facture
->setNumtva('Numtva '.$i);
            $facture
->setDatefacture(new \DateTime('now'));
            $facture
->setVosinfos('Vosinfos '.$i);
            $facture
->setInfosclient('Infosclient '.$i);
            $facture
->setConditions('Conditions '.$i);
            $facture
->setConsignes('Consignes '.$i);
            $facture
->setDesignation1('Designation1 '.$i);
            $facture
->setQuantite1(5);
            $facture
->setPrixht1(150);
            $facture
->setTaxe1(12);


            $facture
->setDesignation2('Designation2 '.$i);
            $facture
->setQuantite2(5);
            $facture
->setPrixht2(150);
            $facture
->setTaxe2(12);


            $facture
->setDesignation3('Designation3 '.$i);
            $facture
->setQuantite3(5);
            $facture
->setPrixht3(150);
            $facture
->setTaxe3(12);


           
//$facture->setUser(1);
            $facture
->setUser($user1);




            $manager
->persist($facture);
       
}


        $manager
->flush();
   
}
}



Facture.php
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\FactureRepository")
 */
class Facture
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=10)
     */
    private $numfacture;

    /**
     * @ORM\Column(type="string", length=13)
     */
    private $numtva;

    /**
     * @ORM\Column(type="datetime")
     */
    private $datefacture;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $vosinfos;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $infosclient;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $conditions;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $consignes;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $designation1;

    /**
     * @ORM\Column(type="integer")
     */
    private $quantite1;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0)
     */
    private $prixht1;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0)
     */
    private $taxe1;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $designation2;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $quantite2;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0, nullable=true)
     */
    private $prixht2;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0)
     */
    private $taxe2;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $designation3;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $quantite3;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0)
     */
    private $prixht3;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=0)
     */
    private $taxe3;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="factures")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;




    public function getId(): ?int
    {
        return $this->id;
    }

    public function getNumfacture(): ?string
    {
        return $this->numfacture;
    }

    public function setNumfacture(string $numfacture): self
    {
        $this->numfacture = $numfacture;

        return $this;
    }

    public function getNumtva(): ?string
    {
        return $this->numtva;
    }

    public function setNumtva(string $numtva): self
    {
        $this->numtva = $numtva;

        return $this;
    }

    public function getDatefacture(): ?\DateTimeInterface
    {
        return $this->datefacture;
    }

    public function setDatefacture(\DateTimeInterface $datefacture): self
    {
        $this->datefacture = $datefacture;

        return $this;
    }

    public function getVosinfos(): ?string
    {
        return $this->vosinfos;
    }

    public function setVosinfos(string $vosinfos): self
    {
        $this->vosinfos = $vosinfos;

        return $this;
    }

    public function getInfosclient(): ?string
    {
        return $this->infosclient;
    }

    public function setInfosclient(string $infosclient): self
    {
        $this->infosclient = $infosclient;

        return $this;
    }

    public function getConditions(): ?string
    {
        return $this->conditions;
    }

    public function setConditions(string $conditions): self
    {
        $this->conditions = $conditions;

        return $this;
    }

    public function getConsignes(): ?string
    {
        return $this->consignes;
    }

    public function setConsignes(string $consignes): self
    {
        $this->consignes = $consignes;

        return $this;
    }

    public function getDesignation1(): ?string
    {
        return $this->designation1;
    }

    public function setDesignation1(string $designation1): self
    {
        $this->designation1 = $designation1;

        return $this;
    }

    public function getQuantite1(): ?int
    {
        return $this->quantite1;
    }

    public function setQuantite1(int $quantite1): self
    {
        $this->quantite1 = $quantite1;

        return $this;
    }

    public function getPrixht1()
    {
        return $this->prixht1;
    }

    public function setPrixht1($prixht1): self
    {
        $this->prixht1 = $prixht1;

        return $this;
    }

    public function getTaxe1()
    {
        return $this->taxe1;
    }

    public function setTaxe1($taxe1): self
    {
        $this->taxe1 = $taxe1;

        return $this;
    }

    public function getDesignation2(): ?string
    {
        return $this->designation2;
    }

    public function setDesignation2(string $designation2): self
    {
        $this->designation2 = $designation2;

        return $this;
    }

    public function getQuantite2(): ?int
    {
        return $this->quantite2;
    }

    public function setQuantite2(?int $quantite2): self
    {
        $this->quantite2 = $quantite2;

        return $this;
    }

    public function getPrixht2()
    {
        return $this->prixht2;
    }

    public function setPrixht2($prixht2): self
    {
        $this->prixht2 = $prixht2;

        return $this;
    }

    public function getTaxe2()
    {
        return $this->taxe2;
    }

    public function setTaxe2($taxe2): self
    {
        $this->taxe2 = $taxe2;

        return $this;
    }

    public function getDesignation3(): ?string
    {
        return $this->designation3;
    }

    public function setDesignation3(?string $designation3): self
    {
        $this->designation3 = $designation3;

        return $this;
    }

    public function getQuantite3(): ?int
    {
        return $this->quantite3;
    }

    public function setQuantite3(?int $quantite3): self
    {
        $this->quantite3 = $quantite3;

        return $this;
    }

    public function getPrixht3()
    {
        return $this->prixht3;
    }

    public function setPrixht3($prixht3): self
    {
        $this->prixht3 = $prixht3;

        return $this;
    }

    public function getTaxe3()
    {
        return $this->taxe3;
    }

    public function setTaxe3($taxe3): self
    {
        $this->taxe3 = $taxe3;

        return $this;
    }

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(?User $user): self
    {
        $this->user = $user;

        return $this;
    }




}



User.php
<?php

namespace App\Entity;

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

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $username;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $password;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $email;


    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Facture", mappedBy="user")
     */
    private $factures;

    /**
     * @ORM\Column(type="array")
     */
    private $roles = [];


    public function __construct()
    {
        $this->factures = new ArrayCollection();
    }



    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getUsername(): ?string
    {
        return $this->username;
    }

    public function setUsername(string $username): self
    {
        $this->username = $username;

        return $this;
    }

    public function getPassword(): ?string
    {
        return $this->password;
    }

    public function setPassword(string $password): self
    {
        $this->password = $password;

        return $this;
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(string $email): self
    {
        $this->email = $email;

        return $this;
    }

    /**
     * @return Collection|Facture[]
     */
    public function getFactures(): Collection
    {
        return $this->factures;
    }

    public function addFacture(Facture $facture): self
    {
        if (!$this->factures->contains($facture)) {
            $this->factures[] = $facture;
            $facture->setUser($this);
        }

        return $this;
    }

    public function removeFacture(Facture $facture): self
    {
        if ($this->factures->contains($facture)) {
            $this->factures->removeElement($facture);
            // set the owning side to null (unless already changed)
            if ($facture->getUser() === $this) {
                $facture->setUser(null);
            }
        }

        return $this;
    }

    public function getRoles(): ?array
    {
        return $this->roles;
    }

    public function setRoles(array $roles): self
    {
        $this->roles = $roles;

        return $this;
    }

}



bablon arnaud

unread,
Apr 29, 2019, 8:08:55 AM4/29/19
to asso...@googlegroups.com
Salut, soit tu persiste tes facture avant de persist ton user soit tu rajoute un persist cascade au niveau de l annotation de ta relation facture.

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Association Francophone des Utilisateurs de Symfony".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse asso-afsy+...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Mathieu M

unread,
Apr 29, 2019, 2:05:32 PM4/29/19
to asso...@googlegroups.com
Salut, 

Dans les fixtures tu peux faire un setReference et getReference. 

En utilisant les dépendances (implémente DependFixturesInterface de mémoire) entre fixtures tu va pouvoir "ordonner" et gérer les dépendances de tes fixtures.

Bonne soirée

Terrien V3

unread,
Apr 29, 2019, 2:20:58 PM4/29/19
to asso...@googlegroups.com
Bonjour,

Essaye d'ajouter un cascade = persist dans ton entité 'Facture'


    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="factures", cascade="persist")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

<div class="m_3891189935885540981m_-834149279488075703m_-6078449845291840288m_-469284604440815988

inform...@gmail.com

unread,
Apr 30, 2019, 7:56:55 AM4/30/19
to Association Francophone des Utilisateurs de Symfony
Bonjour
Je crois que mon problème c'est que je ne comprends pas comment rajouter une facture liée à un utilisateur. J'ai bien fait ceci : 
/**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="factures", cascade="persist")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

Voici FactureFixtures.php:
<?php

namespace App\DataFixtures;


use App\Entity\Facture;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class FactureFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
      

            $user = new User();

            $facture = new Facture();
            $facture->setNumfacture('Numfacture ');
            $facture->setNumtva('Numtva ');
            $facture->setDatefacture(new \DateTime('now'));
            $facture->setVosinfos('Vosinfos ');
            $facture->setInfosclient('Infosclient ');
            $facture->setConditions('Conditions ');
            $facture->setConsignes('Consignes ');
            $facture->setDesignation1('Designation1 ');
            $facture->setQuantite1(5);
            $facture->setPrixht1(150);
            $facture->setTaxe1(12);

            $facture->setDesignation2('Designation2 ');
            $facture->setQuantite2(5);
            $facture->setPrixht2(150);
            $facture->setTaxe2(12);

            $facture->setDesignation3('Designation3 ');
            $facture->setQuantite3(5);
            $facture->setPrixht3(150);
            $facture->setTaxe3(12);

            $user->addFacture($facture);


            $manager->persist($facture);
        //}

        $manager->flush();
    }
}


Comment faire le lien avec l'utilisateur crée ici dans UserFixtures.php:
<?php

namespace App\DataFixtures;

use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class UserFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        
            $user = new User();
            $user->setName('NameUser');
            $user->setUsername('Username ');
            $user->setPassword('Password');
            $user->setEmail('em...@gmail.com');
            $user->getFactures('Factures');

            $manager->persist($user);

        $manager->flush();
    }
}



Merci
Reply all
Reply to author
Forward
0 new messages