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

[Dúvida] Como faz para pesquisar os alunos por nome API GOLANG?

estou fazendo o curso de Go e Gin: criando API rest com simplicidade, quero fazer diferente do que esta do curso, quero que seja possivel pesquisar por nome em vez de so por id

fiz ele assim mas nao deu certo so retorna um json vazio (com as chaves mas sem valor)

func SearchStudents(c *gin.Context) {
    var s models.Student
    name := c.Params.ByName("name")
    database.DB.Find(&s, name)

    c.JSON(http.StatusOK, s)

}
1 resposta
solução!

Olá, Samuel! Tudo joia?

Sobre o código que você compartilhou, você está no caminho certo, mas há um pequeno detalhe que precisa ser ajustado.

O método Find do GORM (que é o que você está usando para interagir com o banco de dados) espera que o segundo argumento seja o valor da chave primária do registro que você está tentando encontrar. No seu caso, parece que você está tentando usar o nome do aluno como chave, o que não é o comportamento padrão.

Para pesquisar por nome, você pode usar o método Where do GORM. Aqui está um exemplo de como você pode adaptar sua função para fazer isso:

func SearchStudents(c *gin.Context) {
    var s []models.Student
    name := c.Params.ByName("name")
    if err := database.DB.Where("name = ?", name).Find(&s).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{"error": "Record not found!"})
        return
    }

    c.JSON(http.StatusOK, s)
}

Neste exemplo, Where("name = ?", name) está dizendo ao GORM para encontrar todos os registros de alunos cujo nome corresponde ao valor de name. Note que agora s é um slice de models.Student, pois pode haver mais de um aluno com o mesmo nome. Se você quiser que apenas o primeiro registro seja retornado, você pode usar o método First em vez de Find.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.