Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Gostaria de uma explicação mais detalhada possível para ajudar no entendimento desta function...

 public function studentsWithPhones(): array
    {
        $sql = 'SELECT 
                students.id, 
                students.name, 
                students.birth_date, 
                phone.id AS phone_id, 
                phone.area_code, 
                phone.number
                FROM students
                JOIN phone ON students.id = phone.students_id
            ';
        $stmt = $this->creatConection->query($sql);
        $result = $stmt->fetchAll();

        $studentList = [];
        foreach ($result as $row) {
            if (!array_key_exists($row['id'], $studentList)) {
                $studentList[$row['id']] = new Student(
                    $row['id'],
                    $row['name'],
                    new \DateTimeImmutable($row['birth_date'])
                );
            }
            $phone = new Phone($row['phone_id'], $row['area_code'], $row['number']);
            $studentList[$row['id']]->addPhone($phone);

        }
        return $studentList;
    }
1 resposta
solução!

Essa função studentsWithPhones() tem o objetivo de buscar no banco de dados uma lista de estudantes junto com seus respectivos telefones e estruturá-los como objetos da classe Student, associando a cada estudante um ou mais objetos da classe Phone. Ela começa construindo uma query SQL que junta as tabelas students e phone através do campo students.id, retornando os dados do estudante e seus telefones. A consulta é então executada e os resultados são armazenados em um array.

A seguir, um laço percorre cada linha do resultado. Se um estudante ainda não estiver no array $studentList, um novo objeto Student é criado e armazenado na lista, utilizando o ID como chave. Esse objeto recebe o ID, o nome e a data de nascimento, que é convertida para um objeto DateTimeImmutable. Depois, um novo objeto Phone é criado com os dados do telefone e adicionado ao estudante correspondente através do método addPhone().

O retorno da função é um array associativo onde a chave é o ID do estudante e o valor é um objeto Student contendo seus dados e uma lista de telefones. Isso permite estruturar os dados de forma organizada, facilitando a manipulação posterior dentro da aplicação. Essa abordagem garante que mesmo estudantes com múltiplos telefones sejam representados corretamente em um único objeto, evitando a duplicação de informações.

Espero tê-lo ajudado, bons estudos!