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

esta aparecendo o seguinte erro quando executo com o mysql

An exception occurred while executing 'INSERT INTO medico (crm, nome, especialidade_id) VALUES (?, ?, ?)' with params [111111, "1\u00ba medico", 1]:

SQLSTATE[HY000]: General error: 1364 Field 'no' doesn't have a default value



                    ****Alguem sabe solucionar?****
9 respostas

Olá João,

Pelo erro você tem um campo chamado no na sua tabela medico, mas não está passando o valor para esse campo na hora de inserir os dados.

Verifica como está a sua tabela medico e o seu arquivo de migration, provavelmente está errado o nome do campo nesse arquivo.

Se possível compartilha o seu arquivo de migration pra gente conferir.

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20191218170303 extends AbstractMigration
{
    public function getDescription() : string
    {
        return '';
    }

    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('CREATE TABLE medico (id INT AUTO_INCREMENT NOT NULL, crm INT NOT NULL, nome VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');

        $this->addSql('DROP TABLE medico');
    }
}

/**

  • Auto-generated Migration: Please modify to your needs! */ final class Version20191218175627 extends AbstractMigration { public function getDescription() : string {

     return '';

    }

    public function up(Schema $schema) : void {

     // this up() migration is auto-generated, please modify it to your needs
     $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
    
     $this->addSql('ALTER TABLE medico ADD especialidade_id INT NOT NULL, ADD no VARCHAR(255) NOT NULL');
     $this->addSql('ALTER TABLE medico ADD CONSTRAINT FK_34E5914C3BA9BFA5 FOREIGN KEY (especialidade_id) REFERENCES especialidade (id)');
     $this->addSql('CREATE INDEX IDX_34E5914C3BA9BFA5 ON medico (especialidade_id)');

    }

    public function down(Schema $schema) : void {

     // this down() migration is auto-generated, please modify it to your needs
     $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
    
     $this->addSql('ALTER TABLE medico DROP FOREIGN KEY FK_34E5914C3BA9BFA5');
     $this->addSql('DROP INDEX IDX_34E5914C3BA9BFA5 ON medico');
     $this->addSql('ALTER TABLE medico DROP especialidade_id, DROP no');

    } }

então esse arquivo $no não tem utilidade, devo exclui-lo?

Não é um arquivo, é um campo na tabela do seu banco de dados. Esse campo chamado no está sendo criado por causa dessa linha na sua segunda migration:

$this->addSql('ALTER TABLE medico ADD especialidade_id INT NOT NULL, ADD no VARCHAR(255) NOT NULL');

// Exatamente na parte:
ADD no VARCHAR(255) NOT NULL

Eu não vi esse código na aula, acredito que foi adicionado por engano quando a migration foi gerada pelo comando. Além disso está faltando uma parte importante na segunda migration, não tem o código de criação da tabela especialidade (não é relacionado com o erro atual).

Talvez seja melhor você refazer os passos da Aula 06 atividade 02 utilizando os arquivos baixados na atividade anterior.

Qualquer problema que aparecer é só falar aqui, e compartilha o seu código completo também que a gente tenta ajudar.

retirei a parte na qual o "no" era criado e o erro premaneceu...editei de duas formas: comentando a linha toda e tirando o ADD no VARCHAR(255) NOT NULL

solução!

Apenas remover esse código não vai ter efeito, porque esse código serve apenas para criar um campo no banco de dados, esse código nem é executado enquanto você acessa a página do seu sistema, ele é executado apenas quando você roda o comando para executar as migrations. Então o banco de dados também deve ser alterado para apagar a coluna no.

Mas como eu disse, parece que isso foi causado durante a geração da migration pelo comando, então talvez tenha outros arquivos alterados.

Se possível compartilha o seu código completo que fica mais fácil da gente analisar, pode ser pelo Github, um link do Google Drive, etc...

solucionado...

Se possível manda um link do Google Drive mesmo, fica melhor pra qualquer pessoa que entrar no fórum acessar.