Maison > développement back-end > Golang > La requête GORM golang SQL effectuant une recherche insensible à la casse ne fonctionne pas

La requête GORM golang SQL effectuant une recherche insensible à la casse ne fonctionne pas

PHPz
Libérer: 2024-02-05 22:03:08
avant
1356 Les gens l'ont consulté

GORM golang SQL 查询执行不区分大小写的搜索不起作用

Contenu de la question

Je souhaite effectuer une recherche insensible à la casse dans Golang. J'utilise cette bibliothèque.

J'ai essayé ce qui suit mais cela ne fonctionne pas.

someId = "abc"
model := abcModel{Id: someId}
result := p.db.Where("lower(id) = lower(?)", someId).Take(&model)
Copier après la connexion
<code>
Id is primary-key here
</code>
Copier après la connexion

Je l'ai essayé aussi

db.Where("LOWER(id) LIKE LOWER(?)", fmt.Sprintf("%%%s%%", someId)).Take(&model)
Copier après la connexion

Quelqu'un peut-il m'aider ? Je ne sais pas ce qui n'a pas fonctionné. Tous les indicateurs seraient grandement appréciés.

Merci !

<小时/>

Éditeur :

Voici ce que j'ai dans la base de données

id      |          created_at           |          updated_at           | deleted_at |  client_id | ttl  |             client_type              |    token  |          expires_on          
--------------------------------------+-------------------------------+-------------------------------+------------+--------------------------------------+------+--------------------------------------+
        ABC      | 2023-10-30 16:10:59.614132+00 | 2023-10-30 16:10:59.614132+00 |            |  ae30e377  | 100  | 7da0e618-7393-45c2-94dc-5e7b1d6c1610 |   abc     | 2023-10-30 16:27:39.613566+00
Copier après la connexion

Je m'attendrais à ce que la requête ci-dessus renvoie cet enregistrement dans la base de données car il s'agit d'une recherche insensible à la casse.

L'erreur que j'ai reçue est record not found https://gorm.io/docs/error_handling.html#ErrRecordNotFound

J'utilise un serveur Postgres dans un conteneur Docker. https://hub.docker.com/_/postgres


La bonne réponse


n'est pas encore claire p 代表什么,但这里有一个使用 Take()Where().Take() Exemple fonctionnel :

func main() {
    // open connection to postgres
    db, err := gorm.Open(postgres.New(...), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // Get the row
    someId := "abc"
    var result abcModel
    db.Take(&result, "lower(id) = lower(?)", someId)
    // Print the row
    fmt.Println(result)

    // Find the row using Where
    var result2 abcModel
    db.Where("lower(id) = lower(?)", someId).Take(&result2)
    // Print the row
    fmt.Println(result2)

}
Copier après la connexion

Sortie :

$ go run .
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}
Copier après la connexion

Donc votre code d'origine semble fonctionner, c'est juste que votre erreur peut être liée à la façon dont p est défini

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal