0

我的问题来自这样一个事实,即我的实体中存在相互依赖的关系。我的实体链接与实体用户有关系。当我尝试使用 UserManagerInterface 加载用户时,它返回NULL。这是我的 AppFixtures 类:

<?php

namespace App\DataFixtures;

use App\Component\Localization;
use App\Entity\Link;
use App\Entity\LinkClick;
use App\Entity\LinkView;
use App\Entity\Visitor;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Faker;
use FOS\UserBundle\Model\UserManagerInterface;
use PUGX\Shortid\Shortid;

class AppFixtures extends Fixture
{
    private $userManager;

    private $localisation;

    public function __construct(UserManagerInterface $userManager, Localization $localization)
    {
        $this->userManager = $userManager;

        $faker = Faker\Factory::create();
        $localization->setParameters($localization::GEO_PLUGIN, $faker->ipv4);
        $localization->localize();
        $this->localisation = $localization->getResult();
    }

    public function load(ObjectManager $manager): void
    {
        $faker = Faker\Factory::create();
        $user  = $this->userManager->createUser();
        $user->setUsername('admin');
        $user->setEmail('admin@kss.tk');
        $user->setPlainPassword('admin');
        $user->setEnabled(true);
        $user->setRoles(['ROLE_ADMIN']);
        $this->userManager->updateUser($user);
        $links    = [];
        $visitors = [];
        for ($i = 0; $i < 100; ++$i) {
            $link = new Link();
            $link->setUrl($faker->url);
            $link->setSlug(Shortid::generate(12, 'abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz01', true));
            $link->setCreatedAt($faker->dateTime);
            $link->setUser($user);
            $links[] = $link;
            $manager->persist($link);
        }

        for ($i = 0; $i < 10000; ++$i) {
            $visitor = new Visitor();
            $visitor->setIp($this->localisation->geoplugin_request);
            $visitor->setCountryCode($this->localisation->geoplugin_countryCode);
            $visitor->setCountryName($this->localisation->geoplugin_countryName);
            $visitors[] = $visitor;
            $manager->persist($visitor);
        }

        for ($i = 0; $i < 10000; ++$i) {
            $linkView = new LinkView();
            $linkView->setDate($faker->dateTimeBetween('-1 years', 'now'));
            $linkView->setVisitor($visitors[rand(0, 999)]);
            $linkView->setLink($links[rand(0, 99)]);
            $manager->persist($linkView);
        }

        for ($i = 0; $i < 10000; ++$i) {
            $linkClick = new LinkClick();
            $linkClick->setDate($faker->dateTimeBetween('-1 years', 'now'));
            $linkClick->setVisitor($visitors[rand(0, 999)]);
            $linkClick->setLink($links[rand(0, 99)]);
            $manager->persist($linkClick);
        }

        $manager->flush();
    }
}

我不想每次都刷新数据库,我想使用现有用户,所以我可以附加固定装置。现在它抛出一个错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'UNIQ_1483A5E992FC23A8'
4

0 回答 0