ola! ao tentar exibir a lista de alunos, apos inserir os telefones, recebo um erro dizendo que a classe Phone nao foi encontrada no PdoStudentRepository. segue a mensagem de erro. obrigado!
PHP Fatal error: Uncaught Error: Class "Phone" not found in E:\Curso PHP ALU\BancoDeDados\src\infrastructure\repository\pdoStudentRepository.php:65 Stack trace:
#0 E:\Curso PHP ALU\BancoDeDados\src\infrastructure\repository\pdoStudentRepository.php(50): Alura\Pdo\Infrastructure\Repository\PdoStudentRepository->fillPhonesOf(Object(Alura\Pdo\Domain\Model\Student))
#1 E:\Curso PHP ALU\BancoDeDados\src\infrastructure\repository\pdoStudentRepository.php(25): Alura\Pdo\Infrastructure\Repository\PdoStudentRepository->hydrateStudentList(Object(PDOStatement))
#2 E:\Curso PHP ALU\BancoDeDados\listaAlunos.php(12): Alura\Pdo\Infrastructure\Repository\PdoStudentRepository->allStudents()
#3 {main} thrown in E:\Curso PHP ALU\BancoDeDados\src\infrastructure\repository\pdoStudentRepository.php on line 65
<?php
namespace Alura\Pdo\Infrastructure\Repository;
use Alura\Pdo\Domain\Model\Student;
use Alura\Pdo\Domain\Repository\StudentRepository;
use PDO;
use Phone;
class PdoStudentRepository implements StudentRepository
{
private PDO $connection;
public function __construct(PDO $connection)
{
$this->connection = $connection;
}
public function allStudents(): array
{
$sqlQuery = 'SELECT * FROM students;';
$stmt = $this->connection->query($sqlQuery);
return $this->hydrateStudentList($stmt);
}
public function studentsBirthAt(\DateTimeInterface $birthDate): array
{
$sqlQuery = 'SELECT * FROM students WHERE birth_date = ?;';
$stmt = $this->connection->prepare($sqlQuery);
$stmt->bindValue(1, $birthDate->format('Y-m-d'));
$stmt->execute();
return $this->hydrateStudentList($stmt);
}
private function hydrateStudentList(\PDOStatement $stmt): array
{
$studentDataList = $stmt->fetchAll();
$studentList = [];
foreach ($studentDataList as $studentData) {
$student = new Student(
$studentData['id'],
$studentData['name'],
new \DateTimeImmutable($studentData['birth_date'])
);
$this->fillPhonesOf($student);
$studentList[] = $student;
}
return $studentList;
}
public function fillPhonesOf(Student $student): void
{
$sqlQuerry = 'SELECT id, area_code, number FROM phones WHERE student_id = ?';
$stmt = $this->connection->prepare($sqlQuerry);
$stmt->bindValue(1, $student->id(), PDO::PARAM_INT);
$stmt->execute();
$phoneDataList = $stmt->fetchAll();
foreach ($phoneDataList as $phoneData) {
$phone = new Phone(
$phoneData['id'],
$phoneData['area_code'],
$phoneData['number']
);
$student->addPhone($phone);
}
}
public function save(Student $student): bool
{
if ($student->id() === null) {
return $this->insert($student);
}
return $this->update($student);
}
private function insert(Student $student): bool
{
$insertQuery = 'INSERT INTO students (name, birth_date) VALUES (:name, :birth_date);';
$stmt = $this->connection->prepare($insertQuery);
$success = $stmt->execute([
':name' => $student->name(),
':birth_date' => $student->birthDate()->format('Y-m-d'),
]);
if ($success) {
$student->defineId($this->connection->lastInsertId());
}
return $success;
}
private function update(Student $student): bool
{
$updateQuery = 'UPDATE students SET name = :name, birth_date = :birth_date WHERE id = :id;';
$stmt = $this->connection->prepare($updateQuery);
$stmt->bindValue(':name', $student->name());
$stmt->bindValue(':birth_date', $student->birthDate()->format('Y-m-d'));
$stmt->bindValue(':id', $student->id(), PDO::PARAM_INT);
return $stmt->execute();
}
public function remove(Student $student): bool
{
$stmt = $this->connection->prepare('DELETE FROM students WHERE id = ?;');
$stmt->bindValue(1, $student->id(), PDO::PARAM_INT);
return $stmt->execute();
}
}