Проблема Symfony DoctrineFixturesBundle с зависимостями

У меня есть класс Fixture, который зависит от двух других классов. Согласно документации, для этого мне нужно реализовать DependentFixtureInterface и добавить метод getDependencies(), возвращающий их. И я сделал, однако я получаю ошибку SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comunidad_autonoma_id' cannot be null. Я уже очищал и прогревал кеш, несколько раз, но ошибка не исчезает. Что мне не хватает?

Вот мой класс Fixture...

<?php

namespace App\DataFixtures\AppCommon;

use App\DataFixtures\AppAdmin\UsuarioFixtures;
use App\Entity\AppCommon\ComunidadAutonoma;
use App\Entity\AppCommon\Provincia;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;

class ProvinciaFixtures extends Fixture implements DependentFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $provincias = [
            ['codigo' => '', 'denominacion' => 'Almería', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Cádiz', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Córdoba', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Granada', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Huelva', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Jaén', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Málaga', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Sevilla', 'descripcion' => '', 'comunidad_autonoma' => 'Andalucía'],
            ['codigo' => '', 'denominacion' => 'Huesca', 'descripcion' => '', 'comunidad_autonoma' => 'Aragón'],
            ['codigo' => '', 'denominacion' => 'Teruel', 'descripcion' => '', 'comunidad_autonoma' => 'Aragón'],
            ['codigo' => '', 'denominacion' => 'Zaragoza', 'descripcion' => '', 'comunidad_autonoma' => 'Aragón'],
            ['codigo' => '', 'denominacion' => 'Las Palmas', 'descripcion' => '', 'comunidad_autonoma' => 'Canarias'],
            ['codigo' => '', 'denominacion' => 'Santa Cruz de Tenerife', 'descripcion' => '', 'comunidad_autonoma' => 'Canarias'],
            ['codigo' => '', 'denominacion' => 'Cantabria', 'descripcion' => '', 'comunidad_autonoma' => 'Cantabria'],
            ['codigo' => '', 'denominacion' => 'Ávila', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Burgos', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'León', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Palencia', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Salamanca', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Segovia', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Soria', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Valladolid', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Zamora', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla y León'],
            ['codigo' => '', 'denominacion' => 'Albacete', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla-La Mancha'],
            ['codigo' => '', 'denominacion' => 'Ciudad Real', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla-La Mancha'],
            ['codigo' => '', 'denominacion' => 'Cuenca', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla-La Mancha'],
            ['codigo' => '', 'denominacion' => 'Guadalajara', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla-La Mancha'],
            ['codigo' => '', 'denominacion' => 'Toledo', 'descripcion' => '', 'comunidad_autonoma' => 'Castilla-La Mancha'],
            ['codigo' => '', 'denominacion' => 'Barcelona', 'descripcion' => '', 'comunidad_autonoma' => 'Cataluña'],
            ['codigo' => '', 'denominacion' => 'Gerona', 'descripcion' => '', 'comunidad_autonoma' => 'Cataluña'],
            ['codigo' => '', 'denominacion' => 'Lérida', 'descripcion' => '', 'comunidad_autonoma' => 'Cataluña'],
            ['codigo' => '', 'denominacion' => 'Tarragona', 'descripcion' => '', 'comunidad_autonoma' => 'Cataluña'],
            ['codigo' => '', 'denominacion' => 'Ceuta', 'descripcion' => '', 'comunidad_autonoma' => 'Ciudades Autónomas'],
            ['codigo' => '', 'denominacion' => 'Melilla', 'descripcion' => '', 'comunidad_autonoma' => 'Ciudades Autónomas'],
            ['codigo' => '', 'denominacion' => 'Madrid', 'descripcion' => '', 'comunidad_autonoma' => 'Comunidad de Madrid'],
            ['codigo' => '', 'denominacion' => 'Navarra', 'descripcion' => '', 'comunidad_autonoma' => 'Comunidad Foral de Navarra'],
            ['codigo' => '', 'denominacion' => 'Alicante', 'descripcion' => '', 'comunidad_autonoma' => 'Comunidad Valenciana'],
            ['codigo' => '', 'denominacion' => 'Castellón', 'descripcion' => '', 'comunidad_autonoma' => 'Comunidad Valenciana'],
            ['codigo' => '', 'denominacion' => 'Valencia', 'descripcion' => '', 'comunidad_autonoma' => 'Comunidad Valenciana'],
            ['codigo' => '', 'denominacion' => 'Badajoz', 'descripcion' => '', 'comunidad_autonoma' => 'Extremadura'],
            ['codigo' => '', 'denominacion' => 'Cáceres', 'descripcion' => '', 'comunidad_autonoma' => 'Extremadura'],
            ['codigo' => '', 'denominacion' => 'La Coruña', 'descripcion' => '', 'comunidad_autonoma' => 'Galicia'],
            ['codigo' => '', 'denominacion' => 'Lugo', 'descripcion' => '', 'comunidad_autonoma' => 'Galicia'],
            ['codigo' => '', 'denominacion' => 'Orense', 'descripcion' => '', 'comunidad_autonoma' => 'Galicia'],
            ['codigo' => '', 'denominacion' => 'Pontevedra', 'descripcion' => '', 'comunidad_autonoma' => 'Galicia'],
            ['codigo' => '', 'denominacion' => 'Baleares', 'descripcion' => '', 'comunidad_autonoma' => 'Islas Baleares'],
            ['codigo' => '', 'denominacion' => 'La Rioja', 'descripcion' => '', 'comunidad_autonoma' => 'La Rioja'],
            ['codigo' => '', 'denominacion' => 'Álava', 'descripcion' => '', 'comunidad_autonoma' => 'País Vasco'],
            ['codigo' => '', 'denominacion' => 'Guipúzcoa', 'descripcion' => '', 'comunidad_autonoma' => 'País Vasco'],
            ['codigo' => '', 'denominacion' => 'Vizcaya', 'descripcion' => '', 'comunidad_autonoma' => 'País Vasco'],
            ['codigo' => '', 'denominacion' => 'Asturias', 'descripcion' => '', 'comunidad_autonoma' => 'Principado de Asturias'],
            ['codigo' => '', 'denominacion' => 'Murcia', 'descripcion' => '', 'comunidad_autonoma' => 'Región de Murcia']
        ];

        foreach ($provincias as $prov) {
            $provincia = new Provincia();
            $provincia->setCreatedBy($this->getReference(UsuarioFixtures::ADMIN_USER_REFERENCE)->getEmail());

            if (!empty($prov['codigo']))
                $provincia->setCodCodigo($prov['codigo']);
            if (!empty($prov['denominacion']))
                $provincia->setCodDenominacion($prov['denominacion']);
            if (!empty($prov['descripcion']))
                $provincia->setCodDescripcion($prov['descripcion']);
            if (!empty($prov['comunidad_autonoma'])) {
                $comunidadAutonoma = $manager
                    ->getRepository(ComunidadAutonoma::class)
                    ->findOneBy(['codDenominacion' => $prov['comunidad_autonoma']]);

                if ($comunidadAutonoma instanceof ComunidadAutonoma)
                    $provincia->setComunidadAutonoma($comunidadAutonoma);
            }

            $manager->persist($provincia);
        }

        $manager->flush();
    }

    public function getDependencies()
    {
        return [
            UsuarioFixtures::class,
            ComunidadAutonomaFixtures::class
        ];
    }
}

И вот ошибка, которую я получаю...

Symfony Station Communiqué - 17 февраля 2023 г.
Symfony Station Communiqué - 17 февраля 2023 г.
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
303
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибка Doctrine явно говорит, что есть Integrity constraint violation. Столбец comunidad_autonoma_id не может быть нулевым. Либо попробуйте обновить свой объект Provincia, чтобы пометить поле omunidadAutonoma как обнуляемое, либо проверить массив набора данных, чтобы убедиться, что у каждого comunidad_autonoma есть соответствующая запись в вашей базе данных.

Ты прав. Позже я понял, что Symfony действительно загружает фикстуры в правильном порядке. Проблема на самом деле в кодировке и всех специальных испанских символах. Теперь я столкнулся с другой проблемой, хахаха ... Извините, я должен был закрыть или хотя бы отредактировать этот вопрос. Все равно спасибо за ответ... ;)

Ivan Mtnz Vigil 21.12.2020 09:34

Отвечает ли это на ваш вопрос ?

dm_tr 21.12.2020 09:39

Да, это так, будьте любезны... Извините за поздний ответ. Как я уже сказал, проблема на самом деле со специальными символами. Объект ComunidadAutonoma существует, у него есть некоторые данные, и имена в наборе данных Provincia верны. Просто все эти специальные символы неправильно вставляются в БД, и, следовательно, ни зависимые объекты... Теперь мне нужно найти правильный способ кодирования всех этих символов...

Ivan Mtnz Vigil 22.12.2020 15:10

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

dm_tr 22.12.2020 15:12

В цикле for each вы не проверяете, не удалось ли выполнить последний из них. Вы должны проверить, прежде чем упорствовать и остановить его еще.

Ты можешь сделать

if ($provincia->getComunidadAutonoma() instanceof ComunidadAutonoma)
    {
        $manager->persist($provincia);
    }

Другие вопросы по теме