TYPO3 не сохраняется последовательно - PullRequest
0 голосов
/ 03 июля 2018

Я создаю События и хочу связать их в консолидированные объекты, соответствующие заголовку, поэтому я создал репозиторий 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 голосов
/ 03 июля 2018

Чтобы ответить на него сам ... Я только что обнаружил, что в функции копирования я скопировал некоторые свойства Модели, которые мне, вероятно, не следует копировать, что сбивает с толку TYPO3 и нарушает сохранение в БД.

Так что, если кто-то наткнется на это, убедитесь, что вы копируете только действительные данные, а не все свойства Модели, так как некоторые свойства могут нарушать функциональность.

...