首页 > 解决方案 > symfony 4 实体管理器刷新有时不起作用

问题描述

我不是 symfony 的专家,非常感谢您的帮助。

我正在使用 API 来接收实时比赛数据(体育)。我获取数据并每分钟更新一次,但不知何故,它每 8 到 15 分钟更新一次。(我使用predis进行缓存,删除它,仍然一样)。它也没有在数据库上更新,我检查它们是否用转储更新,它们看起来很好。

我正在使用的代码是;

        foreach ($response['result'] as $result) {
        $findFixture = $this->em->getRepository('App:Fixtures')->findOneBy(['fixtureId' => $result['fixture_id']]);
        if(is_null($findFixture)){
            $cannotFind[] = $result['fixture_id'];
            continue;
        }else{
            $updateFixture[$findFixture->getFixtureId()]['elapsedFirst'] = $findFixture->getElapsed();
        }

        $eventDate = new DateTime();
        $eventDate->setTimezone(new \DateTimeZone('Europe/Istanbul'));
        $eventDate->setTimestamp($result['event_timestamp']);

        $firstHalfStart = new DateTime();
        $eventDate->setTimezone(new \DateTimeZone('Europe/Istanbul'));
        $firstHalfStart->setTimestamp($result['firstHalfStart']);

        $secondHalfStart = new DateTime();
        $eventDate->setTimezone(new \DateTimeZone('Europe/Istanbul'));
        $secondHalfStart->setTimestamp($result['secondHalfStart']);

        if($findFixture->getElapsed() !== $result['elapsed']){
            $persist = true;
        }else{
            $persist = false;
        }

        $findFixture
            ->setScore($result['score'])
            ->setElapsed($result['elapsed'])
            ->setStatus($result['statusShort'])
            ->setVenue($result['venue'])
            ->setReferee($result['referee'])
            ->setGoalsAwayTeam($result['goalsAwayTeam'])
            ->setGoalsHomeTeam($result['goalsHomeTeam']);

        if($persist) $this->em->persist($findFixture);
        $updateFixture[$findFixture->getFixtureId()]['persist'] = $persist;


        if(isset($result['events']) && is_array($result['events'])){

            foreach ($result['events'] AS $k => $v){
                $result['events'][$k]['fixture_id'] = $findFixture->getFixtureId();
            }

            $this->renderFixtureEvents([$findFixture->getFixtureId() => $result['events'] ],false);
        }

        $this->em->flush();
        $updateFixture[$findFixture->getFixtureId()]['elapsedLast'] = $result['elapsed'];
    }

提前非常感谢。

标签: phpsymfonydoctrine

解决方案


推荐阅读