Задать вопрос
@plamer

Doctrine 2, почему при большой вставке дублируются записи?

Здравствуйте, не могу понять в чем проблема. Когда через Doctrine пытаюсь вставить 3 - 10 т. строк. в базу заходит ровно в два раза больше. То есть алгоритм какой то странный, я вставляю в таблицу (А) 5 т. строк, потом начинаю вставку в таблицу (Б) 3 тыс. строк и как раз вот эти 3 тыс, почему то заходит 6 тыс в базу. При это, если я начну опять запускать скрипт на вставку в таблицу (Б) 3 тыс, то второй раз зайдет уже без умножения на 2. Я проверил циклы все нормально, это Doctrine внутри себя что то делает. При это я делаю $em->flush, $em-clear(), через каждые 200 записей. Пробовал чистить кеш запросы\результат через консоль, всеравно не влияет. Помогите кто-то пожалуйста, уже не один час сижу не могу разобраться, при этом инфы по этому поводу нету.

Функция:
public function test(){
        $reader = ReaderFactory::create(Type::XLSX);
        $file = base_path() . '/excel/cars.xlsx';
        $reader->open($file);

        foreach ($reader->getSheetIterator() as $sheet) {
            foreach ($sheet->getRowIterator() as $key => $row) {
                $test = new \Entities\Test();
                $test
                    ->setCod('CC')
                    ->setName($row[0])
                    ->setImg('')
                    ->setLang(1);

                EntityManager::persist($test);
                if($key % 200 == 0){
                    EntityManager::flush();
                    EntityManager::clear();
                }
            }
        }
        EntityManager::flush();
        EntityManager::clear();
        $reader->close();
    }

Сущность:
<?php
namespace Entities;
use Doctrine\ORM\Mapping as ORM;

/**
 * Rating
 *
 * @ORM\Table(name="test")
 * @ORM\Entity(repositoryClass="\Entities\repositories\TestRepository")
 */
class Test
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="cod", type="string", length=3, nullable=false)
     */
    private $cod;

    /**
     * @var string
     *
     * @ORM\Column(name="img", type="string", length=50, nullable=false)
     */
    private $img;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=100, nullable=false)
     */
    private $name;

    /**
     * @var integer
     *
     * @ORM\Column(name="lang", type="integer", nullable=false)
     */
    private $lang;

    public function getId()
    {
        return $this->id;
    }

    public function setCod($cod)
    {
        $this->cod = $cod;
        return $this;
    }

    public function getCod()
    {
        return $this->cod;
    }

    public function setImg($img)
    {
        $this->img = $img;
        return $this;
    }

    public function getImg()
    {
        return $this->img;
    }

    public function setName($name)
    {
        $this->name = $name;
        return $this;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setLang($lang)
    {
        $this->lang = $lang;
        return $this;
    }

    public function getLang()
    {
        return $this->lang;
    }
}
  • Вопрос задан
  • 256 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
@Arik
запускаете через браузер? Может favicon'ки нет, браузер спрашивает у вашего кода ее и код запускается повторно? А то что первый раз проходит норм, а второй нет, то может сессия быть заблокированной
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы