Symfony DoctrineFixturesBundle 问题与依赖关系
Symfony DoctrineFixturesBundle issue with dependencies
我有一个 Fixture class,它依赖于其他 2 个 classes。根据文档,为此我需要实现 DependentFixtureInterface,并添加一个返回它们的方法 getDependencies()。我做到了,但是我收到 SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comunidad_autonoma_id' cannot be null
错误。我已经多次清除并预热缓存,但错误仍然存在。我错过了什么?
这是我的灯具 class...
<?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
];
}
}
这是我遇到的错误...
Doctrine
错误明确表示存在 Integrity constraint violation
。 comunidad_autonoma_id
列不能为空。要么尝试更新您的实体 Provincia
以将字段 omunidadAutonoma
标记为可为空,要么检查您的数据集数组以确保每个 comunidad_autonoma
在您的数据库中都有相应的记录。
在 for each 循环中,您不检查最后一个循环是否失败。你必须在坚持之前检查并停止它。
你可以做到
if($provincia->getComunidadAutonoma() instanceof ComunidadAutonoma)
{
$manager->persist($provincia);
}
我有一个 Fixture class,它依赖于其他 2 个 classes。根据文档,为此我需要实现 DependentFixtureInterface,并添加一个返回它们的方法 getDependencies()。我做到了,但是我收到 SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comunidad_autonoma_id' cannot be null
错误。我已经多次清除并预热缓存,但错误仍然存在。我错过了什么?
这是我的灯具 class...
<?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
];
}
}
这是我遇到的错误...
Doctrine
错误明确表示存在 Integrity constraint violation
。 comunidad_autonoma_id
列不能为空。要么尝试更新您的实体 Provincia
以将字段 omunidadAutonoma
标记为可为空,要么检查您的数据集数组以确保每个 comunidad_autonoma
在您的数据库中都有相应的记录。
在 for each 循环中,您不检查最后一个循环是否失败。你必须在坚持之前检查并停止它。
你可以做到
if($provincia->getComunidadAutonoma() instanceof ComunidadAutonoma)
{
$manager->persist($provincia);
}