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 ✓.