Сохранять дважды на фейкере в следующей версии - PullRequest
1 голос
/ 13 апреля 2020

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

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

Сущность проекта:

<?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"}).      

1 Ответ

0 голосов
/ 16 апреля 2020

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

1 / Удалить папку с фейкером у поставщика.

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

"fzaninotto/faker": "^1.9"

до

"fzaninotto/faker": "1.8"

3 / Запуск composer обновление

-> Дыхание сейчас ...

...