2
respostas

Como será usado metodo update ?

Olá professor, tudo bem ? Neste curso não usamos o método updateStudent, gostaria de saber como ele seria utilizado, como passar os novos dados, uma vez que ele espera uma instância de Student. Usando um metodo de busca para checar recuperar os dados do registro a ser editado, e depois usando o save para sobrescrever os dados , talvez ? Agradeço

2 respostas

Jailson, já tem um bom tempo que gravei esse treinamento então você pode refrescar minha memória? Como é o método updateStudent? rsrs

Só pela sua descrição, podemos simplesmente instanciar um Student com o ID correto e suas novas informações que podem ter vindo de um formulário, por exemplo. Faz sentido?

Esse é o código que foi passado no curso

interface StudentRepository
{
    public function allStudents(): array;
    public function studentsBirthAt(\DateTimeInterface $birthDate): array;
    public function save(Student $student): bool;
    public function remove(Student $student): bool;
}

Class de PdoStudentRepository implements StudentRepository

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();
    }

Você irá criar um novo objeto do tipo Student, inicializá-lo passando o Id no construtor do objeto, criar uma nova instancia de PdoStudentRepository, e passar a instancia de Student para o método PdoStudentRepository->save(Student $student); Dentro desse método é verificado a existência do atributo Id, se existir será feito o update desse aluno no banco de dados. É isso que você gostaria de entender , Jailson?