Solucionado (ver solução)
Solucionado
(ver solução)
28
respostas

Erro

Que banco é que vc está criando Vinícius? Quando eu tento criar um banco tenho esse erro:

PS C:\DoctrineContinuacao> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREAT  
  E TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR(45) NOT NULL,   
  ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME  
   ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_ator))':

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists'  
   while executing DDL: CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_  
  nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizad  
  o TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_a  
  tor))


In AbstractPostgreSQLDriver.php line 66:

  An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NO  
  T NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NUL  
  L, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL,  
   PRIMARY KEY(id_ator))':

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists   


In PDOConnection.php line 83:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists  


In PDOConnection.php line 78:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists


orm:schema-tool:create [--dump-sql]
28 respostas

Travei nesse ponto! Alguém me consegue dar uma ajuda?

Márcio, você está tentando criar uma tabela que já existe. Esse é seu problema. :-)

O banco aparentemente já está criado.

Eu deletei a tabela alura_filmes_novo e tentei executar de novo, porém, o erro persiste Vinícios.

<?php

namespace Alura\Doctrine\Helper;

use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Alura\Doctrine\Type\TipoClassificacao;

class EntityManagerCreator
{
    public function criaEntityManager(): EntityManagerInterface
    {
        $config = Setup::createXMLMetadataConfiguration(
            [__DIR__ . '/../../mapeamentos']
        );
        $con = [
            'driver' => 'pdo_pgsql',
            'host' => 'localhost',
            'dbname' => 'alura_filmes_novo',
            'user' => 'postgres',
            'password' => '1112',
        ];

        Type::addType('classificacao', TipoClassificacao::class);

        $em = EntityManager::create($con, $config);

        $em->getConnection()
           ->getDatabasePlatform()
           ->registerDoctrineTypeMapping(
                'CLASSIFICACAO',
                'classificacao'
            );

        return $em;
    }
}




PS C:\DoctrineAvancado> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In AbstractPostgreSQLDriver.php line 73:

  An exception occurred in driver: SQLSTATE[08006] [7] FATAL:  database "alur  
  a_filmes_novo" does not exist


In PDOConnection.php line 31:

  SQLSTATE[08006] [7] FATAL:  database "alura_filmes_novo" does not exist  


In PDOConnection.php line 27:

  SQLSTATE[08006] [7] FATAL:  database "alura_filmes_novo" does not exist


orm:schema-tool:create [--dump-sql]

PS C:\DoctrineAvancado>

Márcio, acho que você tá fazendo confusões com o banco de dados.

alura_filmes_novo não é uma tabela. É um banco de dados. Pra você se conectar nele, ele precisa existir.

Seu erro horiginal era que a tabela ator já existia no banco em que você estava se conectando.

Então Vinicius, eu criei somente o banco alura_filmes_novo através do postgre sem tabela nenhuma, porém, quando eu tento criar o schema exatamente como faz na vídeo aula, dá esse erro para mim. Todo o meu código está igual ao seu. Eu até peguei os seus arquivo para testar com eles, o erro persiste referente a classificação.

PS C:\DoctrineAvancado> vendor\bin\doctrine orm:schema-tool:create

 !
 ! [CAUTION] This operation should not be executed in a production environment!
 !

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREAT  
  E TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original SMALLINT NOT NU  
  LL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinops  
  e TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL, data_atualizad  
  o TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CL  
  ASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))':

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^' while execu  
  ting DDL: CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original   
  SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) N  
  OT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL,  
   data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, c  
  lassificacao CLASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))


In AbstractPostgreSQLDriver.php line 79:

  An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL   
  NOT NULL, id_idioma_original SMALLINT NOT NULL, id_idioma_audio SMALLINT NO  
  T NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancam  
  ento VARCHAR(4) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZON  
  E DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY K  
  EY(id_filme))':

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


In PDOConnection.php line 83:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


In PDOConnection.php line 78:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not   
  exist
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...   
                                                               ^


orm:schema-tool:create [--dump-sql]

PS C:\DoctrineAvancado> 

Márcio, rolou alguma confusão sua entre os 2 bancos pois você está tentando criar o schema do banco usando o tipo CLASSIFICACAO sem antes criar esse tipo no banco de dados.

Se não me engano, logo na segunda aula isso é tratado.

Vou refazer todo o processo todo para ver se dá certo Vinicius.

Então Vinicius, o novo arquivo do banco que vc passou para a gente neste capítulo não está atualizado como o teu.

Como assim, Márcio? Em qual capítulo, e qual o diff?

O arquivo db.sql de recursos avançados está com o conteúdo do mapeamento com xml.

Márcio, você pode me informar em que capítulo específico esse arquivo com erro é disponibilizado, por favor?

Está no primeiro capítulo em Preparando o ambiente de recursos avançados com doctrine.

Então Vinicius, vc tá pulando a ordem da instrução no capítulo 2 de Tipos personalizados, porque até lá vc já tinha criado o esquema do banco no vídeo Unique em várias colunas e não tinha apagado mais. Depois no vídeo Tipos personalizados vc cria uma novo esquema sem fazer um drop. Eu tentei criar esse esquema que me retorna esse erro.

C:\DoctrineAvancado>vendor\bin\doctrine orm:schema-tool:create

 !                                                                                                                      
 ! [CAUTION] This operation should not be executed in a production environment!                                         
 !                                                                                                                      

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original   
  SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4  
  ) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY   
  KEY(id_filme))':                                                                                                                         

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist                                                         
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...                                                               
                                                               ^' while executing DDL: CREATE TABLE filme (id_filme SERIAL NOT NULL, id_i  
  dioma_original SMALLINT NOT NULL, id_idioma_audio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lanca  
  mento VARCHAR(4) DEFAULT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT  
   NULL, PRIMARY KEY(id_filme))                                                                                                            


In AbstractPostgreSQLDriver.php line 79:

  An exception occurred while executing 'CREATE TABLE filme (id_filme SERIAL NOT NULL, id_idioma_original SMALLINT NOT NULL, id_idioma_au  
  dio SMALLINT NOT NULL, titulo VARCHAR(255) NOT NULL, sinopse TEXT DEFAULT NULL, ano_lancamento VARCHAR(4) DEFAULT NULL, data_atualizado  
   TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICACAO NOT NULL, PRIMARY KEY(id_filme))':                 

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist                                                         
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...                                                               
                                                               ^                                                                           


In PDOConnection.php line 83:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist  
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...        
                                                               ^                    

In PDOConnection.php line 78:

  SQLSTATE[42704]: Undefined object: 7 ERROR:  type "classificacao" does not exist  
  LINE 1: ...TIME ZONE DEFAULT 'NOW()' NOT NULL, classificacao CLASSIFICA...        
                                                               ^                    
orm:schema-tool:create [--dump-sql]

Eu acredito que está faltando o arquivo do banco com o novo formato para eu criar o novo banco alura_filmes_novo com o devido esquema de classificacao

Então Márcio, se você tivesse me apontado o capítulo onde você está recebendo o erro teria facilitado bastante minha vida. rsrsrs

Mas corri atrás e vamos lá. Nesse capítulo aqui você recebe o bd.sql: https://cursos.alura.com.br/course/php-doctrine-mapeamento-banco-legado/task/62389

Nesse arquivo de texto você tem a definição do tipo CLASSIFICACAO.

Já o banco alura_filmes_novo realmente só vai ser criado pelo Doctrine então não é pra eu fornecer nenhum outro arquivo não. :-)

Eu estou em recursos avançados do doctrine, estou no segundo vídeo desse capítulo onde vc cria o esquema do banco de dados depois de ter criado toda a parte do tipo classificacao. Quando eu tento criar o esquema para o banco alura_filmes_novo aparece esse erro que eu passei acima para vc.

Márcio, o segundo vídeo desse treinamento "Recursos avançados" é esse: https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62260

Você pode, por favor, me enviar o link do vídeo em que o erro acontece? Senão eu vou ter que reassistir o treinamento inteiro até encontrar o problema.

rsrs

Aqui nesse vídeo Vinicius, vc cria uma esquema e é onde eu não estou conseguindo avançar.

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62264

Eu segui o passo a passo até essa parte do curso, porém, quando tento criar o esquema do banco que nem vc faz no vídeo, gera esse erro passado acima para mim dizendo que classificacao não existe.

Márcio, assisti somente esse vídeo e não vi o problema.

Eu estava conectado no banco de dados que já possui o tipo CLASSIFICACAO, certo? Conforme o arquivo bd.sql que foi disponibilizado.

Ao gerar o schema, o PHP só atualizou as tabelas que tinha que atualizar, mas o tipo continuou lá.

Isso foi explicado nesse vídeo aqui:

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/62263

Eu digo que lá no pgAdmin tem que executar a criação do tipo. :-)

Quer acessar o meu note e ver se consegue gerar essa tabela para mim Vinicius?

Você rodou o comando pra criar o tipo no pgAdmin antes de tentar gerar o esquema do banco?

Rodei esse script do arquivo que vc disponibiliza para a gente depois de criar o banco alura_filmes_novo

CREATE TABLE ator
(
  id_ator         SERIAL      PRIMARY KEY,
  primeiro_nome   VARCHAR(45) NOT NULL,
  ultimo_nome     VARCHAR(45) NOT NULL,
  data_atualizado TIMESTAMP   NOT NULL DEFAULT 'NOW()'
);
CREATE INDEX idx_ultimo_nome ON ator USING btree (ultimo_nome);
CREATE UNIQUE INDEX idx_nome_completo_unique ON ator (primeiro_nome, ultimo_nome);

CREATE TABLE idioma
(
  id_idioma       SMALLSERIAL PRIMARY KEY,
  nome            CHAR(20)  NOT NULL,
  data_atualizado TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE TYPE CLASSIFICACAO AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
CREATE TABLE filme
(
  id_filme           SERIAL PRIMARY KEY,
  titulo             VARCHAR(255)    NOT NULL,
  sinopse            TEXT            DEFAULT NULL,
  ano_lancamento     VARCHAR(4)        NOT NULL,
  id_idioma_audio    SMALLINT        NOT NULL,
  id_idioma_original SMALLINT        NOT NULL,
  classificacao      CLASSIFICACAO    DEFAULT 'G',
  data_atualizado    TIMESTAMP        NOT NULL DEFAULT NOW(),
  CONSTRAINT fk_id_idioma_audio_filme FOREIGN KEY (id_idioma_audio) REFERENCES idioma (id_idioma),
  CONSTRAINT fk_id_idioma_original_filme FOREIGN KEY (id_idioma_original) REFERENCES idioma (id_idioma)
);

CREATE TABLE ator_filme
(
  id_ator  INT NOT NULL,
  id_filme INT NOT NULL,
  PRIMARY KEY (id_ator, id_filme),
  CONSTRAINT fk_ator FOREIGN KEY (id_ator) REFERENCES ator (id_ator),
  CONSTRAINT fk_filme FOREIGN KEY (id_filme) REFERENCES filme (id_filme)
);
solução!

Vê se isso resolve:

https://cursos.alura.com.br/course/php-doctrine-indices-heranca-sql-nativo/task/79503

Quando crio as tabelas antes o erro fala que já existe.

C:\DoctrineAvancado>vendor\bin\doctrine orm:schema-tool:create
 !                                                                                                                      
 ! [CAUTION] This operation should not be executed in a production environment!                                         
 !                                                                                                                      

 Creating database schema...


In ToolsException.php line 34:

  Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR  
  (45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(i  
  d_ator))':                                                                                                                               

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists' while executing DDL: CREATE TABLE ator (id_ator SERIAL NOT   
  NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARCHAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW  
  ()' NOT NULL, PRIMARY KEY(id_ator))                                                                                                      


In AbstractPostgreSQLDriver.php line 66:

  An exception occurred while executing 'CREATE TABLE ator (id_ator SERIAL NOT NULL, primeiro_nome VARCHAR(45) NOT NULL, ultimo_nome VARC  
  HAR(45) NOT NULL, data_atualizado TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT 'NOW()' NOT NULL, PRIMARY KEY(id_ator))':                       

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists                                                               


In PDOConnection.php line 83:

  SQLSTATE[42P07]: Duplicate table: 7 ERROR:  relation "ator" already exists  


In PDOConnection.php line 78:

C:\DoctrineAvancado>

Mas, Márcio.

Se o esquema já existe, por que você está tentado criá-lo? Eu não to entendendo qual o seu propósito.

=/

Já consegui criar o esquema Vinicius! A dica que vc passou acima funcionou.