如何解决教义冲洗许多实体
当我尝试以 CSV 格式导入用户列表时,它会一个一个地刷新实体,而不是一次刷新 N 个实体。
我试图制作一个可以刷新 N 次的代码,但最后出现错误:
ImportMemberFileHandler.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;
}
}
导入服务.php
public function importRow(ImportRow $importRow,$flush){
...
...
$flush ? $this->createMember($member,$importRow,$row,true) :
$this->createMember($member,false);
}
private function createMember(Member $member,ImportRow $importRow,array $row,$flush)
{
$flush ? $this->memberHandler->handleCreate($member,true) :
$this->memberHandler->handleCreate($member,false);
}
MemberHandler.php
公共函数handleCreate(Member $member,$flush): void
{
$group = $member->getGroup();
$this->em->persist($member);
if ($member->isCommunityMember()) {
$this->userHandler->handleCreate($member->getUser(),$flush);
$rootMember = $this->memberRepository->findMember($member->getUser(),$group->getCommunity()->getRoot());
if (!$group->getCommunity()->isRoot() && null === $rootMember) {
$rootMember = new Member();
$rootMember->setGroup($group->getCommunity()->getRoot());
$rootMember->setState(MemberStates::APPROVED);
$rootMember->setUser($member->getUser());
$rootMember->setCreatedBy($member->getUser());
$rootMember->setUpdatedBy($member->getUser());
$defaultRole = $this->em->getRepository(RoleGroup::class)->findGroupDefaultRole($group->getCommunity()->getRoot());
$rootMember->addRole($defaultRole);
$this->em->persist($rootMember);
}
if ($member->isRootCommunityMember()) {
$member->getUser()->setAdmin($member->isAdmin());
}
if ($member->isAdmin() || CommunityStates::PUBLISHED === $group->getCommunity()->getState()) {
$this->userHandler->handleRequestRegistrationConfirmation($member->getUser(),$member->getCommunity());
}
} else {
// If group has a conversation,added the new member as participant
$this->threadManager->addMemberToThreadGroup($member);
}
$defaultRole = $this->em->getRepository(RoleGroup::class)->findGroupDefaultRole($group);
$member->addRole($defaultRole);
if ($flush) {
$this->em->flush();
}
UserHandler.php
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('-',$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.
不要犹豫,问我更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。