2
respostas

PHP - Doctrine - Executar Inserção de Registro

Bom dia, estou tendo problemas na hora de executar o arquivo para inserir um aluno na base de dados. O erro que ele apresenta está logo abaixo:

PHP Fatal error:  Uncaught TypeError: Return value of Alura\Doctrine\Entity\Aluno::setNome() must be of the type string, none returned in /var/www/desenvolvimento/doctrine/src/Entity/Aluno.php:33
Stack trace:
#0 /var/www/desenvolvimento/doctrine/app/cmd-aluno.php(15): Alura\Doctrine\Entity\Aluno->setNome('Pedro Henrique')
#1 {main}
  thrown in /var/www/desenvolvimento/doctrine/src/Entity/Aluno.php on line 33

o meu arquivo da classe Aluno está da seguinte forma:

<?php


namespace Alura\Doctrine\Entity;

/**
 * @Entity
 * @Table(name="alunos")
 */
class Aluno {
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;

    /**
     * @Column(type="string")
     */
    private $nome;

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

    public function getNome() : string {
        return $this->nome;
    }

    public function setNome( string $nome) : self {
        $this->nome = $nome;
    }
}

obs: quando retiro o self da função setNome ele funciona normalmente e a minha versão do PHP é a 7.2

2 respostas

Olá, Pedro.

Recomendo que você faça os treinamentos básicos de PHP aqui da Alura para entender melhor este conceito.

Com : self no final da assinatura do método você está informando ao PHP que o retorno deste método deve ser uma instância da própria classe (Aluno) quando na verdade você não está retornando nada. Este é o erro.

Bom dia Vinicius, realmente eu observei onde estava errando. Gostaria de tirar uma dúvida com você agora sobre outro problema. Possuo entidades mapeadas para Oracle e gostaria de migrar essas entidades para SQL Server, existe algum comando no doctrine que faça isso ? Pois foi implementado SEQUENCE como forma de estratégias nas entidades em vez do AUTO.