Newscoop\CommunityTickerBundle\Command\MigrateTablesCommand::migrateData PHP 메소드

migrateData() 공개 메소드

Migrate data to plugin database from core table
public migrateData ( EntityManager $em, Symfony\Component\Console\Output\OutputInterface $output ) : void
$em EntityManager
$output Symfony\Component\Console\Output\OutputInterface
리턴 void
    public function migrateData($em, $output)
    {
        $rsm = new ResultSetMapping();
        $rsm->addEntityResult('Newscoop\\CommunityTickerBundle\\Entity\\CommunityTickerEvent', 'e');
        $rsm->addFieldResult('e', 'id', 'id');
        $rsm->addFieldResult('e', 'event', 'event');
        $rsm->addFieldResult('e', 'params', 'params');
        $rsm->addFieldResult('e', 'created', 'created');
        $rsm->addJoinedEntityResult('Newscoop\\Entity\\User', 'u', 'e', 'user');
        $rsm->addFieldResult('u', 'Id', 'id');
        $query = $em->createNativeQuery('SELECT e.id, e.event, e.params, e.created, u.Id FROM community_ticker_event e ' . 'LEFT JOIN liveuser_users u ON u.id = e.user_id', $rsm);
        $events = $query->getArrayResult();
        foreach ($events as $key => $event) {
            $user = $em->getRepository('Newscoop\\Entity\\User')->findOneBy(array('id' => $event['user']['id']));
            $existingEvent = $em->getRepository('Newscoop\\CommunityTickerBundle\\Entity\\CommunityTickerEvent')->findOneBy(array('created' => $event['created'], 'params' => $event['params']));
            if (!$existingEvent) {
                $newEvent = new CommunityTickerEvent();
                $newEvent->setEvent($event['event']);
                $newEvent->setParams($event['params'] != '[]' ? json_decode($event['params'], true) : array());
                $newEvent->setCreated($event['created']);
                $newEvent->setIsActive(true);
                if ($user) {
                    $newEvent->setUser($user);
                }
                $em->persist($newEvent);
            }
        }
        $em->flush();
        $output->writeln('<info>Data migrated to plugin table!</info>');
        $output->writeln('<info>Removing old table...</info>');
    }