orm - Una nueva entidad fue encontrada a través de la relación. Doctrina
zend-framework doctrine (1)
La aplicación ha lanzado una excepción!
Doctrine / ORM / ORMInvalidArgumentException
Se encontró una nueva entidad a través de la relación ''Core / Model / Filter # category'' que no se configuró para las operaciones de persistencia en cascada para la entidad: Core / Model / Category @ 00000000314fc99200005639c0395a5e. Para resolver este problema: Llame explícitamente a EntityManager # persist () en esta entidad desconocida o configure cascade para mantener esta asociación en la asignación, por ejemplo @ManyToOne (.., cascade = {"persist"}). Si no puede descubrir qué entidad causa el problema, implemente ''Core / Model / Category #__ toString ()'' para obtener una pista.
Esta función causa una excepción. Algunos comits en el código. Es ZendFramework 2.
protected function handleCategory( $data, /Core/Model/Project $project )
{
$filter = $this->sl()->get( "Core/Filter/JSON/Category" );
$filter->setData( $data );
if( !$filter->isValid() ){
$id = @$data[ ''id'' ];
$report = array(
''id'' => $id,
''messages'' => $filter->getMessages()
);
return $report;
}
$filteredData = $filter->getValues();
$repo = $this->em()->getRepository( "Core/Model/Category" );
$category = $repo->findOneBy(
array(
''id'' => $filteredData[ ''id'' ],
''project'' => $project->getId()
)
);
$b = false;
if( !$category ){
$b = true;
$category = new /Core/Model/Category;
$category->setProject( $project )
->setCreatedAt( new /DateTime() );
}
$category->setUpdatedAt( new /DateTime() );
/* Hydrate Category */
$hydrator = $this->sl()->get( "Core/Hydrator/JSON/Category" );
$hydrator->hydrate( $filteredData, $category );
/* Persist Category */
$this->em()->persist($category);
if($b)
{
/* Return Filter Data */
$filterData = $hydrator->get();
/* Hydrate Filter */
$filterHydrator = $this->sl()->get( ''Core/Hydrator/JSON/Filter'' );
//$filtersObj = array();
foreach($filterData as $i => $fdata)
{
$filterObj = new /Core/Model/Filter;
$filterObj->setProject($project)->setCategory($category);
$filterHydrator->hydrate($fdata, $filterObj);
$this->em()->persist($filterObj);
/*Breaks after any flush after second persist*/
$this->em()->flush();
}
}
return true;
}
Traté de resolver este problema al:
- MERGE, pero obtenga otra excepción, A managed dirty + entity [...]
- cascade = {"persist"}, pero no pasó nada.
- reescribir el código porque lo que ves, hice que todo persista en una función, una por una, con un EntityManager. (Si me falta algo, por favor dime)
Nunca trabajes antes con ZendFramework. Me encanta Symfony con la aplicación / administrador de la consola, todas las entidades con tablas crean automáticamente.
Resuelto este problema con la adición
$this->em()->clear(''Filter'');
después
$this->em()->persist($filterObj);
Y podemos eliminar
$this->em()->flush();
Para hacer el script más rápido. Lo pego al final.
Creo que esto no es una buena idea, pero funciona. Todavía estoy esperando tus respuestas.