3
respostas

Erro ao salvar telefone - var argc não reconhecida

Não consigo persistir os dados de telefone no banco (apenas o aluno). Me parece que não reconhece a var argc (minha versao PHP 7.3.7). Segue erro exibido no prompt:

C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\criar-aluno.php "Vinicios Dias" "(24) 99999-9999" "(24) 23785-2568"
PHP Warning:  Use of undefined constant argc - assumed 'argc' (this will throw an Error in a future version of PHP) in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\criar-aluno.php on line 18

C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\buscar-alunos.php
PHP Fatal error:  Uncaught TypeError: Return value of Alura\Doctrine\Entity\Aluno::getTelefones() must be an instance of mysql_xdevapi\Collection, instance of Doctrine\ORM\PersistentCollection returned in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php:66
Stack trace:
#0 C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\buscar-alunos.php(21): Alura\Doctrine\Entity\Aluno->getTelefones()
#1 {main}
  thrown in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php on line 66

C:\Users\6595197\Documents\Programacao\php-alura\doctrine>
3 respostas

Fala, Jamil!

Primeiro: Sempre coloque seu código e saída de comandos entre 3 crases (`), assim consigo visualizar melhor. Já editei seu post pra ficar assim.

Segundo, preciso ver seu código, mas aparentemente você só se esqueceu do $ antes do nome da variável. ;-)

Opa Vinicius!

Parece que a classe Aluno não reconhece o que é um ArrayCollection. O código só apresentou estes problemas ao relacionar as entidades Aluno e Telefone.

<?php

namespace Alura\Doctrine\Entity;

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

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

    //Trata-se de uma coleção de dados. No doctrine usamos Collection
    //Doctrine além de ORM fornece biblioteca de coleçoes, com muitos metodos para manipulação, semelhante ao array
    //Relação 1 to N. Um aluno pode ser mapeado para varios telefones

    /**
     * @OneToMany(targetEntity="Telefone", mappedBy="Aluno", cascade="remove", {"persist"})
     */
    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;
    }

    //Recebe telefone da instancia Telefone...esse tel recebido no param ja vem c informacao do dono(aluno)
    public function addTelefones(Telefone $telefone)
    {
        $this->telefones->add($telefone);
        $telefone->setAluno($this);
        return $this;
    }

    //A recuperação dos telefones não é um array, mas uma string. No processo de persistencia no banco vira string(implode)
    public function getTelefones (): ArrayCollection
    {
        return $this->telefones;
    }

}

No prompt aparece este erro ao buscar um aluno:

C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\buscar-alunos.php
PHP Fatal error:  Uncaught TypeError: Return value of Alura\Doctrine\Entity\Aluno::getTelefones() must be an instance of Doctrine\Common\Collections\ArrayCollection, instance of Doctrine\ORM\PersistentCollection returned in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php:66
Stack trace:
#0 C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\buscar-alunos.php(21): Alura\Doctrine\Entity\Aluno->getTelefones()
#1 {main}
  thrown in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\src\Entity\Aluno.php on line 66

No prompt ao criar um aluno:

` C:\Users\6595197\Documents\Programacao\php-alura\doctrine>php commands\criar-aluno.php "Flavio Almeida" "(21) 2222 - 2222" PHP Fatal error: Uncaught Error: Class 'Telefone' not found in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\criar-aluno.php:21 Stack trace:

#0 {main} thrown in C:\Users\6595197\Documents\Programacao\php-alura\doctrine\commands\criar-aluno.php on line 21

Fala, Jamil

Você tá com vários problemas diferentes, meu caro rsrsrsrs

Seu problema original era o que eu falei? Só faltava o $ mesmo?

Agora quanto ao seu "novo" problema, o que é isso, meu fera? use mysql_xdevapi\Collection; Kkkkk

Que classe é essa?

Conforme eu fiz no treinamento, o método getTelefones deve retornar uma interface do tipo Doctrine\Common\Collections\Collection;

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software