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

aluno_id cheve

Vinicius ao executar o orm:diff foram geradas as migrations, contudo não gerou o Campo aluno_id.

O SQL da Migration ficou assim:

$this->addSql('CREATE TABLE Aluno (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nome VARCHAR(255) NOT NULL)');

$this->addSql('CREATE TABLE Telefone (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, numero VARCHAR(255) NOT NULL)');

Sebe me dizer onde eu errei ? Onde eu incorporo esta relação para que o campo da Entity seja criado no banco com esta relação ?

5 respostas

Olá, Paulo. Como estão seus mapeamentos?

<?php

namespace  Alura\Doctrine\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

/** 
 * @Entity
 */
class Aluno
{
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $nome;
    /**
     * @OneToMany(targetEntity="Telefone", mappedBy="aluno")
     */
    private $telefones;

    public function __construct() {
        $this->telefones = new ArrayCollection();
    }

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

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

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

    public function addTelefone(Telefone $telefone)
    {
        $this->telefones->add($telefone);
        $telefone->setAluno($this);

        return $this;
    }

    public function getTelefones(): Collection
    {
        return $this->telefones;
    }
}
<?php

namespace Alura\Doctrine\Entity;

/**
 * @Entity
 */

Class Telefone 
{
    /**
     * @id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $numero;
    /**
     * ManyToOne(targetEntity="Aluno")
     */
    private $aluno;

    public function getNumero():string
    {
        return $this->numero;
    }

    public function setNumero(string $numero): self
    {
        $this->numero = $numero;

        return $this;
    }

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

    public function setId(int $id): self
    {
        $this->id = $id;

        return $this;
    }

    public function getAluno(): Aluno
    {
        return $this->aluno;
    }

    public function setAluno(Aluno $aluno): self
    {
        $this->aluno = $aluno;

        return $this;
    }
}

Se preferir subo no git.

solução!

Faltou o @ antes do ManyToOne na entidade Telefone, Paulo.

PS.: Sempre que for colocar código aqui no fórum, coloque entre 3 crases (`). Assim o código fica formatado. Já editei sua mensagem pra que eu conseguisse ler. rsrs

Vinicius, muito obrigado !

Acabei de descobrir rsrsrs. Estou usando o VSCODE e não achei nenum plugin para as annotations o que dificulta um pouco. também não encontrei para doctrine e alguns métodos como o find ou findAll não dão auto complete. Fazer o que ? De certo pondo de vista é até melhor para o aprendizado.

Já estava há uns dias com esse problema mas e assim que lhe enviei continuei fuçando e descobri. Quando ia informar vi que vc já tinha respondido. Aff ....

Muito obrigado mesmo. De qualquer forma como não tinha a relação. De um erro informando que estava procurando null isso me levanta a questão e se o aluno não tiver telefones ? (não sei se vai informar isso mais na frente no curso)

Se o aluno não tiver telefones, a propriedade vai ser uma ArrayCollection vazia. :-)