Выполнить SQL в Doctrine Fixtures Symfony 4 - PullRequest
0 голосов
/ 21 октября 2019

Я хочу вставить Sql-код в базу данных Doctrine Fixtures. Вот мой класс.

class ProvinceFixtures extends BaseFixtures
{
    public function loadData(ObjectManager $manager)
    {
        $sql = '
            INSERT INTO `province` (`id`, `name`, `created_at`, `updated_at`) VALUES
                (1, \'TP Đà Nẵng\', \'2019-07-09 08:45:02\', \'2019-07-09 08:45:02\'),
                (2, \'TP Hà Nội\', \'2019-07-09 08:45:02\', \'2019-07-09 08:45:02\'),
                (3, \'TP Hải Phòng\', \'2019-07-09 08:45:02\', \'2019-07-09 08:45:02\');
        ';

        /* @var EntityManagerInterface $manager */
        $manager->getConnection()->exec($sql);

        $manager->flush();
    }
}

Но когда я запускаю doctrine:fixtures:load, мой Терминал показывает этот журнал.

Call to an undefined method Doctrine\Common\Persistence\ObjectManager::getConnection().

Как я могу это исправить. Спасибо.

* Обновление: BaseFixture класс

abstract class BaseFixtures extends Fixture
{
    /** @var Generator */
    protected $faker;
    /** @var ObjectManager */
    private $manager;

    private $referencesIndex = [];

    abstract protected function loadData(ObjectManager $manager);

    public function __construct()
    {
        $this->faker = Factory::create();
    }

    public function load(ObjectManager $manager)
    {
        $this->manager = $manager;
        $this->faker = Factory::create();
        $this->loadData($manager);
    }

    protected function createMany(string $className, int $count, callable $factory)
    {
        for ($i = 0; $i < $count; ++$i) {
            $entity = new $className();
            $factory($entity, $i);
            $this->manager->persist($entity);

            // store for usage later as App\Entity\ClassName_#COUNT#
            $this->addReference($className.'_'.$i, $entity);
        }
    }
}

Я обновил свой класс BaseFixture.

1 Ответ

0 голосов
/ 21 октября 2019

Я добавил

/**
 * @param EntityManagerInterface $manager
 */
public function loadData(ObjectManager $manager)
{
    $sql = '';

    /* @var EntityManagerInterface $manager */
    $manager->getConnection()->exec($sql);

    $manager->flush();
}

Это верно?

...