Bom dia, estou com um problema no mapeamento da minha classe, mas antes, não tem relação com a minha dúvida, mas tem um erro na transcrição da aula, abaixo do vídeo tem esse trecho de código:
public function jsonSerialize()
{
return [
'id' => $this->getId(),
'crm' => $this->getCrm(),
'nome' => $this->getNome(),
//erro abaixo
'especialidadeId' => $this->getEspecialidade()=>getId()
];
}
acho que o correto é assim:
'especialidadeId' => $this->getEspecialidade()->getId()
];
}
Quanto à minha dúvida, quando tento fazer um post para inserir um médico é me apresentado o seguinte erro:
An exception occurred while executing 'INSERT INTO medico (crm, nome, especialidade_id) VALUES (?, ?, ?)' with params [123456, "primeiro m\u00e9dico", null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'especialidade_id' cannot be null
Ao que me parece a ORM não está conseguindo relacionar o atributo $especialidade à coluna especialidade_id e não sei onde estou errando.
Medico.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Medico implements \JsonSerializable{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="integer")
*/
private $crm;
/**
* @ORM\Column(type="string")
*/
private $nome;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Especialidade")
* @ORM\JoinColumn(nullable=false)
*/
private $especialidade;
public function getId(): ?int
{
return $this->id;
}
public function getCrm(): ?int
{
return $this->crm;
}
public function setCrm(int $crm): self
{
$this->crm = $crm;
return $this;
}
public function getNome(): ?string
{
return $this->nome;
}
public function setNome($nome): self
{
$this->nome = $nome;
return $this;
}
public function getEspecialidade(): ?Especialidade
{
return $this->Especialidade;
}
public function setEspecialidade(?Especialidade $especialidade): self
{
$this->Especialidade = $especialidade;
return $this;
}
public function jsonSerialize()
{
return [
'id' => $this->getId(),
'crm' => $this->getCrm(),
'nome' => $this->getNome(),
'especialidadeId' => $this->getEspecialidade()->getId()
];
}
}
MedicoFactory.php
<?php
namespace App\Helper;
use App\Entity\Medico;
use App\Repository\EspecialidadeRepository;
class MedicoFactory{
/**
* @var EspecialidadeRepository
*/
private $especialidadeRepository;
public function __construct(EspecialidadeRepository $especialidadeRepository)
{
$this->especialidadeRepository = $especialidadeRepository;
}
public function criarMedico(string $json): Medico{
$dadosEmJson = json_decode($json);
$especialidadeId = $dadosEmJson->especialidadeId;
$especialidade = $this->especialidadeRepository->find($especialidadeId);
$medico = new Medico();
$medico
->setCrm($dadosEmJson->crm)
->setNome($dadosEmJson->nome)
->setEspecialidade($especialidade);
return $medico;
}
}
Dá para identificar só por esses arquivos o erro?