Doctrine 条令冲淡了许多实体
当我尝试导入CSV格式的用户列表时,它会逐个刷新实体,而不是一次刷新N个实体 我试图创建一个刷新N次的代码,但最后出现了一个错误: ImportMemberFileHandler.phpDoctrine 条令冲淡了许多实体,doctrine,entity,flush,persist,Doctrine,Entity,Flush,Persist,当我尝试导入CSV格式的用户列表时,它会逐个刷新实体,而不是一次刷新N个实体 我试图创建一个刷新N次的代码,但最后出现了一个错误: ImportMemberFileHandler.php protected function import(Import $import, Workflow $stateMachine) { $limit = 100; $counter = 1; $rowsToImport = $this->rowRepository->find
protected function import(Import $import, Workflow $stateMachine)
{
$limit = 100;
$counter = 1;
$rowsToImport = $this->rowRepository->findRowsToProcess($import, $limit);
foreach ($rowsToImport as $row) {
try {
if (0 === ++$counter % 10) {
$this->importService->importRow($row, true);
$this->importRepository->getEntityManager()->flush();
} else {
$this->importService->importRow($row, false);
}
} catch (\Exception $e) {
$this->eventBus->dispatch(new ContinueImportMemberImportFile($import->getId(), $row->getLine()));
return;
}
}
public function handleCreate(User $user, $flush): void
{
$this->updatePassword($user, false);
if (null === $user->getCover()) {
$coverPath = sprintf('build/images/default_covers/user-default-cover-%s.jpg', random_int(1, 5));
$user->setCoverUrl($this->assetExtension->getAssetUrl($coverPath));
}
$user->setFirstName(implode('-', array_map('ucfirst', explode('-', $user->getFirstName()))));
$user->setLastName(implode('-', array_map('ucfirst', explode('-', $user->getLastName()))));
if (null === $user->getLanguage()) {
$user->setLanguage($user->getCommunity()->getInternationalizationSettings()->getLanguage());
}
/** @var WenityUser $wenityUser */
$wenityUser = $this->wenityUserRepository->findOneBy([
'email' => $user->getEmail(),
]);
if (null === $wenityUser) {
$wenityUser = $this->wenityUserFactory->createForUser($user);
$this->em->persist($wenityUser);
} else {
$wenityUser->addUser($user);
}
if ($flush) {
$this->em->flush();
$this->dispatcher->dispatch(new UserEvent($user), UserEvents::USER_CREATED);
}
}
ImportService.php
public function importRow(ImportRow $importRow, $flush){
...
...
$flush ? $this->createMember($member, $importRow, $row, true) :
$this->createMember($member, $importRow, $row, false);
}
private function createMember(Member $member, ImportRow $importRow, array $row, $flush)
{
$flush ? $this->memberHandler->handleCreate($member, true) :
$this->memberHandler->handleCreate($member, false);
}
MemberHandler.php
protected function import(Import $import, Workflow $stateMachine)
{
$limit = 100;
$counter = 1;
$rowsToImport = $this->rowRepository->findRowsToProcess($import, $limit);
foreach ($rowsToImport as $row) {
try {
if (0 === ++$counter % 10) {
$this->importService->importRow($row, true);
$this->importRepository->getEntityManager()->flush();
} else {
$this->importService->importRow($row, false);
}
} catch (\Exception $e) {
$this->eventBus->dispatch(new ContinueImportMemberImportFile($import->getId(), $row->getLine()));
return;
}
}
public function handleCreate(User $user, $flush): void
{
$this->updatePassword($user, false);
if (null === $user->getCover()) {
$coverPath = sprintf('build/images/default_covers/user-default-cover-%s.jpg', random_int(1, 5));
$user->setCoverUrl($this->assetExtension->getAssetUrl($coverPath));
}
$user->setFirstName(implode('-', array_map('ucfirst', explode('-', $user->getFirstName()))));
$user->setLastName(implode('-', array_map('ucfirst', explode('-', $user->getLastName()))));
if (null === $user->getLanguage()) {
$user->setLanguage($user->getCommunity()->getInternationalizationSettings()->getLanguage());
}
/** @var WenityUser $wenityUser */
$wenityUser = $this->wenityUserRepository->findOneBy([
'email' => $user->getEmail(),
]);
if (null === $wenityUser) {
$wenityUser = $this->wenityUserFactory->createForUser($user);
$this->em->persist($wenityUser);
} else {
$wenityUser->addUser($user);
}
if ($flush) {
$this->em->flush();
$this->dispatcher->dispatch(new UserEvent($user), UserEvents::USER_CREATED);
}
}
公共函数handleCreate(成员$Member,$flush):void{
$group=$member->getGroup() UserHandler.php
protected function import(Import $import, Workflow $stateMachine)
{
$limit = 100;
$counter = 1;
$rowsToImport = $this->rowRepository->findRowsToProcess($import, $limit);
foreach ($rowsToImport as $row) {
try {
if (0 === ++$counter % 10) {
$this->importService->importRow($row, true);
$this->importRepository->getEntityManager()->flush();
} else {
$this->importService->importRow($row, false);
}
} catch (\Exception $e) {
$this->eventBus->dispatch(new ContinueImportMemberImportFile($import->getId(), $row->getLine()));
return;
}
}
public function handleCreate(User $user, $flush): void
{
$this->updatePassword($user, false);
if (null === $user->getCover()) {
$coverPath = sprintf('build/images/default_covers/user-default-cover-%s.jpg', random_int(1, 5));
$user->setCoverUrl($this->assetExtension->getAssetUrl($coverPath));
}
$user->setFirstName(implode('-', array_map('ucfirst', explode('-', $user->getFirstName()))));
$user->setLastName(implode('-', array_map('ucfirst', explode('-', $user->getLastName()))));
if (null === $user->getLanguage()) {
$user->setLanguage($user->getCommunity()->getInternationalizationSettings()->getLanguage());
}
/** @var WenityUser $wenityUser */
$wenityUser = $this->wenityUserRepository->findOneBy([
'email' => $user->getEmail(),
]);
if (null === $wenityUser) {
$wenityUser = $this->wenityUserFactory->createForUser($user);
$this->em->persist($wenityUser);
} else {
$wenityUser->addUser($user);
}
if ($flush) {
$this->em->flush();
$this->dispatcher->dispatch(new UserEvent($user), UserEvents::USER_CREATED);
}
}
错误呢
A new entity was found through the relationship 'AppBundle\Entity\User#community' that
was not configured to cascade persist operations for entity:
AppBundle\Entity\Community@000000003cb0341500000000374214ac. To solve this issue: Either
explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this
association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find
out which entity causes the problem implement 'AppBundle\Entity\Community#__toString()' to get a
clue.
请不要犹豫,我可以问我更多的信息