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

migrations:diff error syntax

na aula 4 do módulo 4 ao executar o comando migrations:diff ele me aprensenta o seguinte:

vendor\bin\doctrine-migrations migrations:diff

In AnnotationException.php line 27:

  [Syntax Error] Expected Doctrine\Common\Annotations\DocLexer::T_CLOSE_PARENTHESIS, got 'Aluno' at
  position 25 in property Alura\Doctrine\Entity\Telefone::$aluno.


migrations:diff [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--editor-cmd [EDITOR-CMD]] [--filter-expression [FILTER-EXPRESSION]] [--formatted] [--line-length [LINE-LENGTH]] [--check-database-platform [CHECK-DATABASE-PLATFORM]] [--allow-empty-diff] [--from-empty-schema]

E posteriormente na aula 2 do módulo 5 apresenta o seguinte

In AnnotationException.php line 27:

  [Syntax Error] Expected PlainValue, got '(' at position 62 in property Alura\Doctrine\Entity\Aluno
  ::$telefones.


migrations:diff [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--editor-cmd [EDITOR-CMD]] [--filter-expression [FILTER-EXPRESSION]] [--formatted] [--line-length [LINE-LENGTH]] [--check-database-platform [CHECK-DATABASE-PLATFORM]] [--allow-empty-diff] [--from-empty-schema]

meu arquivo Aluno.php

<?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 $name;
    /**
     * @OneToMany(targetEntity="Telefone", mappedBy="aluno", cascade=("remove", "persist"))
     */
    private $telefones;
    /**
     * @ManyToMany(targetEntity="Curso", mappedBy="alunos")
     */
    private $cursos;

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

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

    public function getName(): string
    {
        return $this->name;
    }

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

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

        return $this;
    }

    public function getTelefone(): Collection
    {
        return $this->telefones;
    }

    public function addCurso(Curso $curso): self
    {
        if ($this->cursos->contains($curso)) {
            return $this;
        }

        $this->cursos->add($curso);
        $curso->addAluno($this);

        return $this;
    }

    public function getCursos(): Collection
    {
        return $this->cursos;
    }
}

que inclusive está apontando erro de função indefinida no add, já conferi e a função existe mas continua apontando erro

Arquivo Telefone.php

<?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 getId(): int
    {
        return $this->id;
    }

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

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

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

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


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

OBS: o primeiro "Syntax Error" não foi resolvido , depois do erro continuei fazendo as aulas e agora apresentou mais um "Syntax Error" e creio que se o segundo for resolvido o primeiro vai continuar.

2 respostas

Não coube tudo então coloquei o outro arquivo aqui.

Arquivo Curso.php

<?php

namespace Alura\Doctrine\Entity;

use Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity
 */
class Curso
{
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="integer")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $name;
    /**
     * @ManyToMany(targetEntity="Aluno", inversedBy="cursos")
     */
    private $alunos;

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

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

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(String $name): self
    {
        $this->name = $name;
        return $this;
    }

    public function addAluno(Aluno $aluno)
    {
        if ($this->alunos->contains($aluno)) {
            return $this;
        }

        $this->alunos->add($aluno);
        $aluno->addCurso($this);
    }

    public function getAluno()
    {
        return $this->alunos;
    }
}
solução!

Aparentemente corrigi o erro retirando os parênteses da descrição de private telefone ficando da seguinte forma

Antes

 /**
     * @OneToMany(targetEntity="Telefone", mappedBy="aluno", cascade=("remove", "persist"))
     */
    private $telefones;

Depois

 /**
     * @OneToMany(targetEntity="Telefone", mappedBy="aluno", cascade="remove", "persist")
     */
    private $telefones;

E o segundo erro era os parêntese que estava errado que tinha colocado da seguinte forma: "Aluno',