#symfony #fixtures
#symfony #приспособления
Вопрос:
У меня есть класс приспособлений, который зависит от 2 других классов. Согласно документации, для этого мне нужно реализовать DependentFixtureInterface и добавить метод getDependencies(), возвращающий их. И я это сделал, однако я получаю SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comunidad_autonoma_id' cannot be null
сообщение об ошибке. Я уже несколько раз очищал и прогревал кеш, но ошибка сохраняется. Чего мне не хватает?
Вот мой класс приспособлений…
<?php
namespace AppDataFixturesAppCommon;
use AppDataFixturesAppAdminUsuarioFixtures;
use AppEntityAppCommonComunidadAutonoma;
use AppEntityAppCommonProvincia;
use DoctrineBundleFixturesBundleFixture;
use DoctrineCommonDataFixturesDependentFixtureInterface;
use DoctrinePersistenceObjectManager;
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
];
}
}
и вот ошибка, которую я получаю…
Ответ №1:
В Doctrine
ошибке явно указано, что существует Integrity constraint violation
. Столбец comunidad_autonoma_id
не может быть нулевым. Либо попробуйте обновить свою сущность Provincia
, чтобы пометить поле omunidadAutonoma
как обнуляемое, либо проверьте свой массив данных, чтобы убедиться, что у каждого comunidad_autonoma
есть соответствующая запись в вашей базе данных.
Комментарии:
1. Вы правы. Позже я понял, что действительно, Symfony загружает приспособления в правильном порядке. Проблема на самом деле в кодировке и всех специальных испанских символах. Теперь я столкнулся с другой проблемой, хахаха… Извините, я должен был закрыть или, по крайней мере, отредактировать этот вопрос. В любом случае спасибо за ваш ответ … 😉
2. Это отвечает на ваш вопрос?
3. Да, это так, вроде как… Извините за поздний ответ. Как я уже сказал, проблема на самом деле связана со специальными символами. Объект
ComunidadAutonoma
существует, у него есть некоторые данные, и имена вProvincia
наборе данных правильные. Просто все эти специальные символы неправильно вставляются в БД, и, следовательно, ни зависимые объекты… Теперь мне нужно найти правильный способ кодирования всех этих символов…4. Отлично. Если он отвечает на ваш вопрос, вы можете пометить его как правильный ответ, чтобы помочь будущим читателям
Ответ №2:
В for each цикле вы не проверяете, не сработал ли последний if. Вы должны проверить, чтобы persit и остановить его еще.
Вы можете сделать
if($provincia->getComunidadAutonoma() instanceof ComunidadAutonoma)
{
$manager->persist($provincia);
}