Symfony & Doctrine MappedSuperClass - Сбой фикстур - PullRequest
0 голосов
/ 28 октября 2018

У меня есть этот сопоставленный суперкласс

/**
 * @ORM\MappedSuperclass()
 */
abstract class Address
{
    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $street;

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

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

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

    public function getStreet(): ?string
    {
        return $this->street;
    }

    public function setStreet(string $street): self
    {
        $this->street = $street;

        return $this;
    }

    public function getZipCode(): ?string
    {
        return $this->zipCode;
    }

    public function setZipCode(string $zipCode): self
    {
        $this->zipCode = $zipCode;

        return $this;
    }

    public function getCity(): ?string
    {
        return $this->city;
    }

    public function setCity(string $city): self
    {
        $this->city = $city;

        return $this;
    }

    public function getCountry(): ?string
    {
        return $this->country;
    }

    public function setCountry(string $country): self
    {
        $this->country = $country;

        return $this;
    }
}

И этот класс местоположения, который унаследовал мой суперкласс:

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass="App\Repository\LocationRepository")
 */
class Location extends Address
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

    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;
    }
}

Я хотел добавить несколько приборов:

class LocationFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        $events = $manager->getRepository(Event::class)->findAll();
        $faker = Factory::create();

        foreach ($events as $event) {
            $location = new Location();
            $location->setName($faker->streetName);
            $location->setStreet($faker->streetAddress);
            $location->setCity($faker->city);
            $location->setCountry($faker->country);
            $location->setZipCode($faker->postcode);
            $event->setLocation($location);
            $manager->persist($event);
        }

        $manager->flush();
    }
}

Но те, кто не с этим сообщением об ошибке:

Исключительная ситуация при выполнении 'INSERT INTO location (имя, улица, почтовый индекс, город, страна) VALUES (?,?,?,?,?) 'с параметрами ["14549 Mayer Freeway \ nSengerchester, ME 42242", null, null, null, null]:

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец' street 'не может быть пустым

Я устанавливаю свой атрибут улицы в моем приборе, так в чем же проблема?

1 Ответ

0 голосов
/ 29 октября 2018

Спасибо, что вы заставили меня указать, в чем была проблема.Я также устанавливал местоположение в моей EventFixture.И это были те, кто терпел неудачу.

Я поместил все в свой прибор Event, и он работал

class EventFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        $faker = Factory::create();

        for ($i = 0; $i < 10; $i++) {
            $event = new Event();
            $event->setName($faker->name);
            $event->setDescription($faker->text);
            $dateStart = $faker->dateTime;
            $event->setStartAt($dateStart);
            $event->setFinishAt($dateStart->add(new \DateInterval('P2D')));
            $event->setPrice($faker->numberBetween(20, 200));
            $event->setType(EventType::PHOTOGRAPHY);
            $event->setInstagram($faker->firstName);

            $location = new Location();
            $location->setName($faker->streetName);
            $location->setStreet($faker->streetAddress);
            $location->setCity($faker->city);
            $location->setCountry($faker->country);
            $location->setZipCode($faker->postcode);
            $manager->persist($location);
            $event->setLocation($location);

            $manager->persist($event);
        }

        $manager->flush();
    }
}
...