TYPO3不能持续存在

时间:2018-07-03 11:14:13

标签: extbase typo3-7.6.x

我正在创建事件,并希望将它们捆绑到按标题匹配的合并对象中,因此我创建了一个EventBundle存储库,其中包含这些对象,并针对该事件注册了单个事件,按标题将它们匹配到捆绑中。

由于我在保存它们方面遇到很多麻烦,所以我已经尽力将它们缓存在本地,这确实有所帮助,但仍然很糟糕。

public function registerEvent($event) {
    //We are matching with the title of the event so we get that first
    $title = $event->getEvTitle();

    if(!isset($this->aBundles[$title]))
        //Then we look up the event bundle for this title, if it does not exist this will return null
        $this->aBundles[$title] = $this->findEventBundleByTitle($title);

    if($this->aBundles[$title] != NULL) {
        $this->aBundles[$title]->copyDetails($event);  
        $this->aBundles[$title]->setEvTitle($title);
        $this->update($this->aBundles[$title]);
        print_r("Update: $title\n");
    }
    else {
        $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
        $this->aBundles[$title] = $objectManager->get('Ext\MyEvents\Domain\Model\EventBundle');
        $this->aBundles[$title]->copyDetails($event);  
        $this->aBundles[$title]->setEvTitle($title);
        $this->add($this->aBundles[$title]);
        print_r("Add: $title\n");
    }
}

public function findEventBundleByTitle($title){
    $query = $this->createQuery();
    $query->getQuerySettings()->setRespectStoragePage(FALSE);
    $query->matching(
        $query->equals('ev_title', $title)
    );
    $res = $query->execute();
    $bundle = ($res->count()==0?NULL:$res->getFirst());
    return $bundle;
}

现在运行该程序,我希望每个标题都会有一个添加,然后进行更新-对于第一次运行是正确的。 但是在随后的运行中,又有一些添加,它与标题中的某些事件不匹配。在每次后续运行中,添加的次数越来越少,直到只有更新为止。但是,当查看数据库时,它现在显示具有相同标题的多个记录。唯一索引也会在第二次运行时导致错误,因为对象查找失败,有时没有任何模式。

知道为什么会发生这种情况吗?我可以检查运行之间数据库中的条目,因此很可能由于某种原因查找失败。但是我完全不知道为什么最终可能会发生这种情况,但是对于某些事件,数据库中不仅有1-2个条目,而且还有很多……

另一个令人困惑的事实是,在运行5次之后,所有事件确实与数据库中的某些事件在此时间点一致匹配5次。但是所有匹配项都与这些条目中的第一个匹配,因此这不是查询未匹配它,而是被忽略,直到有足够多的查询?!,由于数据库查找未返回任何内容而创建的所有条目在此之后都将被忽略点。手动从数据库中删除它们会再次重新开始添加虚假内容。

1 个答案:

答案 0 :(得分:0)

我自己回答...我只是发现,在复制函数中,我复制了Model的某些属性,因此我可能不应该复制,这会使TYPO3感到困惑,并且确实破坏了保存到数据库的过程。

因此,如果有人偶然发现此问题,请确保您仅复制有效数据,而不是复制模型的所有属性,因为某些属性可能会破坏功能。