教义冲洗许多实体

问题描述

当我尝试以 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...