Дважды настаивать на фейкере со следующей версией

У меня проблема с фикстурами с fzaninotto/faker в проекте symfony, у меня есть некоторая таблица с отношениями ManyToOne, которые не завершаются автоматически, когда я загружаю фикстуры, так как у меня есть пакеты обновлений для композитора.

Есть ошибка и сообщение, которое говорит мне добавить каскадное сохранение, но если я это сделаю, запись будет создана дважды. Это мой код и мое сообщение об ошибке, извините за мой плохой английский...

Объект проекта:

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\Table(name="`user`");
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

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

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Role")
     * @ORM\JoinColumn(nullable=false)
     */
    private $role;

Ролевая сущность:


<?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\RoleRepository")
 */
class Role
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @ORM\Column(type="string", length=100, unique=true)
     */
    private $code;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="role")
     */
    private $users;

Файл с фиксами:

<?php

namespace App\DataFixtures;

use Faker\Factory;
use App\Entity\Tag;
use App\Entity\Role;
use App\Entity\User;
use App\Entity\Skill;
use App\Entity\Follow;
use App\Entity\Statut;
use App\Entity\Techno;
use App\Entity\Comment;
use App\Entity\Project;
use App\Entity\Request;
use App\DataFixtures\Provider;
use Faker\ORM\Doctrine\Populator;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class AppFixtures extends Fixture
{


    public function load(ObjectManager $manager)
    {

        $generator = Factory::create('fr_FR');

        // Ajout provider custom Provider 
        $generator->addProvider(new Provider($generator));

        $populator = new Populator($generator, $manager);


        // REMPLIT LES TABLES SIMPLES

        // table "role"
        $populator->addEntity(
            Role::class,
            2,
            [
                'name' => function () use ($generator) {
                    return $generator->unique()->randomElement(['Administrateur', 'Utilisateur']);
                }
            ]
        );

        // table "user"
        $populator->addEntity(
            User::class,
            10,
            [
                'firstname' => function () use ($generator) {
                    return ($generator->firstName());
                },
                'lastname' => function () use ($generator) {
                    return ($generator->lastName());
                },
            ]
        );

И мое сообщение об ошибке при загрузке приборов:

In ORMInvalidArgumentException.php line 105:

  Multiple non-persisted new entities were found through the given association graph:                                              

   * A new entity was found through the relationship 'App\Entity\User#role' that was not configured to cascade persist operations  
   for entity: Administrateur. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or conf  
  igure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).                            
   * A new entity was found through the relationship 'App\Entity\User#role' that was not configured to cascade persist operations  
   for entity: Utilisateur. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configu  
  re cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).      

person Julien    schedule 13.04.2020    source источник


Ответы (1)


Та же проблема с версией 1.9, поэтому просто понизьте ее:

1/ Удалите папку с подделками в вендоре.

2/ Измените composer.json с

"fzaninotto/faker": "^1.9"

to

"fzaninotto/faker": "1.8"

3/ Запустить обновление композитора

--> Дышите сейчас...

person LexaGC    schedule 16.04.2020