Symfony学说批处理不起作用

时间:2015-05-17 08:29:46

标签: symfony doctrine-orm doctrine batch-processing

也许任何人都可以看看:

我有一个函数并使用批处理将批量数据处理到doctrine,但它似乎没有工作,因为没有任何内容插入到数据库中,但如果我flush()每个元素,一切都正常工作

任何想法为什么?

private function insertData($linesInFile, $output)

    {

        $google = $this->getContainer()->get('google.books');
        $amazon = $this->getContainer()->get('amazon.books');
        $em = $this->getContainer()->get('doctrine.orm.entity_manager');
        $number = 1;
        $batchSize = 5;


        foreach ($linesInFile as $string) {
            $string = preg_split('/isbn_13/', $string);
            $book = new Book();
            $isbn = new Isbn();

            if (isset($string[1])) {
                $value = str_split($string[1], 23);
                $isbnValue = preg_replace('/\D/', '', $value[0]);

                $isbn->setIsbn($isbnValue);

                $book = $google->getBookByIsbn($isbn);
                if (null == $book->getIsbn()) {
                    $book = $amazon->getBookByIsbn($isbn);
                }
                $pages = $book->getPages();
                $image = $book->getCover();
                $about = $book->getAbout();

                if ($about !== "") {
                    if ($image !=="") {
                        $em->persist($book);
                        if (($number % $batchSize) === 0) {
                            $em->flush();
                            $em->clear();
                        }
                        $output->writeln($isbnValue);
                        $number++;
                    }
                }
            }
        }
        $em->flush();
        $em->clear();
        return $number;
    }
}

1 个答案:

答案 0 :(得分:0)

所以,我的代码很好,这是谷歌API中的一些错误,项目没有正确持久化。

相关问题