2
respostas

Erro Doctrine\Migrations\Configuration\Configuration::setEntityManagerName() ao implementar cli-config.php

Gente estou tentando implementar o arquivo cli-config.php só que está dando um erro já tentei muitas coisas se algume souber o que está acontecendo.

<?php

use Dotenv\Dotenv;
use DI\ContainerBuilder;
use Doctrine\ORM\ORMSetup;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\DBAL\DriverManager;
use Doctrine\Migrations\DependencyFactory;
use Dotenv\Exception\InvalidPathException;
use Doctrine\Performance\EntityManagerFactory;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Migrations\Configuration\Configuration;
use Doctrine\Migrations\Configuration\Migration\PhpFile;
use Doctrine\Migrations\Configuration\Connection\ExistingConnection;
use Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager;

$testando = new Doctrine\Migrations\Configuration\Configuration;
try {
    $dotenv = Dotenv::createImmutable(realpath(__DIR__. '../../'));
    $dotenv->load();
} catch (InvalidPathException $e) {
    $teste = $e;
}

$testando->setEntityManagerName('teste');

require  __DIR__.'/../../api/vendor/autoload.php';

$config = new PhpFile(__DIR__. '/migrations.php'); // Or use one of the Doctrine\Migrations\Configuration\Configuration\* loaders

$confiEntity = ORMSetup::createAttributeMetadataConfiguration(
    [realpath(__DIR__ . '../../Entity')],
    true
);

$connDBL = [
    'driver' => 'pdo_mysql',
    'host' =>  $_ENV['HOST'],
    'dbname' => $_ENV['DBNAME'],
    'user' =>  $_ENV['USER'],
    'password' => $_ENV['PASS']
];

$conn = \Doctrine\DBAL\DriverManager::getConnection($connDBL);
$entityManager = new EntityManager($conn, $confiEntity);

return DependencyFactory::fromEntityManager($config, new ExistingEntityManager($entityManager));
2 respostas

Explica melhor o que você está tentando fazer e que erro você está vendo ao tentar executar.

Aconteceu um erro parecido comigo. Ao tentar utilizar o ExistingEntityManager desta forma:

$config = new PhpFile(__DIR__ . '/migrations.php');
$entityManager = \Alura\Doctrine\Helper\EntityManagerCreator::createEntityManager();
return DependencyFactory::fromEntityManager($config, new ExistingEntityManager($entityManager));

Ele dá erro:

ExistingEntityManager contains 1 abstract method and must therefore be declared abstract or implement the remaining methods

Uma solução que consegui foi utizando o ExistingConnection assim:

$config = new PhpFile(__DIR__ . '/migrations.php');
$conn = DriverManager::getConnection(['driver' => 'pdo_sqlite', 'memory' => true]);
return DependencyFactory::fromConnection($config, new ExistingConnection($conn));

Eu pesquisei em alguns forum e pode ser incompatibilidade da versão do seu ORM com a do Migration.

Depois de bater muita cabeça, eu desinstalei todas as versões recomendadas no curso e baixei tudo pegando as últimas verões de tudo e funcionou. Segue a configuração que fiz no meu PHP 8.2:

"require": {
    "symfony/yaml": "^5.4",
    "symfony/cache": "^5.4",
    "doctrine/orm": "^2.14",
    "doctrine/dbal": "^3.5",
    "doctrine/annotations": "^2.0",
    "doctrine/migrations": "^3.5"
  }

Espero que consiga sua resposta, pois ninguém responde meus forums aki...