Table des matières
Contenu des questions
Solution
Définition de la structure
Paramètres et graines
Lire la logique
Maison développement back-end Golang Comment interroger un modèle où la valeur intrinsèque d'une relation est égale à une valeur spécifique ?

Comment interroger un modèle où la valeur intrinsèque d'une relation est égale à une valeur spécifique ?

Feb 09, 2024 pm 06:39 PM
sql语句

Comment interroger un modèle où la valeur intrinsèque dune relation est égale à une valeur spécifique ?

Lors du développement et de la conception de modèles de bases de données, nous devons parfois nous demander si la valeur intégrée dans la relation est égale à une valeur spécifique. Ce problème est souvent rencontré dans les applications pratiques, mais il n’est pas forcément facile à résoudre. Dans cet article, je vais vous présenter un modèle avec un moyen efficace de demander si la valeur intrinsèque d'une relation est égale à une valeur spécifique. Ne vous inquiétez pas, je l'expliquerai clairement dans un langage concis et facile à comprendre pour vous aider à le comprendre et à l'appliquer rapidement au développement réel. Nous allons jeter un coup d'oeil!

Contenu des questions

J'ai deux modèles différents (carstypes),它们彼此相关(属于关系),其中两个模型都有一个嵌入式 struct 用于公共数据(post)。我想检索某些 types,但只想收到 postcars réponses avec des valeurs égales à une certaine valeur.

shorty a dit, sur la base du modèle ci-dessous, je veux trouver tous types,其中cars.post.published égaux à vrai.

Modèle

type post struct {
  published bool
}

type car struct {
  gorm.model
  brand string
  post post `gorm:"embedded"`
}

type type struct {
  gorm.model
  name string
  carid uint32
  car car
  post post `gorm:"embedded"`
}
Copier après la connexion

Utilisez db.preload("car").find(&type) 我能够在答案对象中获取 car 值。如果我在 car 结构上使用 where() 函数(即 where(car{brand: "volvo"}) 我可以通过 brand 获取值,但是当使用 post 时(即 where(car{post: post {published: true})) et il renverra simplement tout.

Je ferais mieux d'utiliser le modèle principal qui doit être interrogé comme base pour la fonction where(). Par exemple :

q := Type{Car: Car{Post: Post{Published: true}}}
db.Preload("Car").Where(q).Find(&Type)
Copier après la connexion

...mais ça ne semble pas fonctionner. Comment implémenter une telle requête sans utiliser le générateur SQL brut ?

Solution

J'ai pu résoudre votre problème de la manière suivante. Je partagerai d’abord le code, puis j’aborderai les points clés qui méritent d’être expliqués.

package main

import (
    "fmt"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

type Post struct {
    Published bool
}

type Car struct {
    gorm.Model
    Brand  string
    TypeID int
    Type   Type
    Post   Post `gorm:"embedded"`
}

type Type struct {
    gorm.Model
    Name  string
    CarID int
    Post  Post `gorm:"embedded"`
}

func main() {
    dsn := "host=localhost port=54322 user=postgres password=postgres dbname=postgres sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn))
    if err != nil {
        panic(err)
    }
    db.AutoMigrate(&Car{})
    db.AutoMigrate(&Type{})

    // uncomment these to seed data
    // db.Create(&Car{Brand: "Tesla", Type: Type{Name: "SUV", Post: Post{Published: true}}, Post: Post{Published: true}})
    // db.Create(&Car{Brand: "Ford", Type: Type{Name: "City", Post: Post{Published: false}}, Post: Post{Published: false}})

    var cars []Car
    if err := db.Debug().Model(&Car{}).Preload("Type").Where(&Car{Post: Post{Published: true}}).Find(&cars).Error; err != nil {
        panic(err)
    }
    for _, v := range cars {
        fmt.Println(v.Type.Name)
    }
}
Copier après la connexion

Maintenant, permettez-moi de partager quelques idées.

Définition de la structure

Je l'ai légèrement modifié pour gérer cette scène. J'ai ajouté son homologue de la définition de la structure type 结构中删除了 car 字段,并在 car.

Paramètres et graines

Ensuite, j'ai configuré la connexion à la base de données via gorm. Je synchronise le modèle défini dans le code avec la relation qui existe dans la base de données. Pour démontrer, j'ai semé manuellement des données factices.

Lire la logique

Ensuite, j'exécute la requête pour obtenir les données pertinentes. J'ai utilisé la méthode suivante :

  1. debug : utilisé pour enregistrer les instructions SQL réelles
  2. model : utilisé pour préciser la relation que nous souhaitons gérer
  3. preload:用于加载typeConnexe
  4. where : permet de préciser des conditions (dans notre cas, le filtre est sur la structure embarquée)
  5. find : utilisé pour mapper les résultats aux variables

S'il vous plaît dites-moi si cela aide à résoudre votre problème, merci !

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Puis-je installer mysql sur Windows 7 Puis-je installer mysql sur Windows 7 Apr 08, 2025 pm 03:21 PM

Oui, MySQL peut être installé sur Windows 7, et bien que Microsoft ait cessé de prendre en charge Windows 7, MySQL est toujours compatible avec lui. Cependant, les points suivants doivent être notés lors du processus d'installation: téléchargez le programme d'installation MySQL pour Windows. Sélectionnez la version appropriée de MySQL (communauté ou entreprise). Sélectionnez le répertoire d'installation et le jeu de caractères appropriés pendant le processus d'installation. Définissez le mot de passe de l'utilisateur racine et gardez-le correctement. Connectez-vous à la base de données pour les tests. Notez les problèmes de compatibilité et de sécurité sur Windows 7, et il est recommandé de passer à un système d'exploitation pris en charge.

Comment créer des tables avec SQL Server à l'aide de l'instruction SQL Comment créer des tables avec SQL Server à l'aide de l'instruction SQL Apr 09, 2025 pm 03:48 PM

Comment créer des tables à l'aide de instructions SQL dans SQL Server: Ouvrez SQL Server Management Studio et connectez-vous au serveur de base de données. Sélectionnez la base de données pour créer le tableau. Entrez l'instruction Créer la table pour spécifier le nom de la table, le nom de la colonne, le type de données et les contraintes. Cliquez sur le bouton Exécuter pour créer le tableau.

Comment juger l'injection SQL Comment juger l'injection SQL Apr 09, 2025 pm 04:18 PM

Les méthodes pour juger l'injection de SQL incluent: la détection des entrées suspectes, la visualisation des instructions SQL originales, l'utilisation d'outils de détection, la visualisation des journaux de la base de données et l'exécution des tests de pénétration. Une fois l'injection détectée, prenez des mesures pour corriger les vulnérabilités, vérifier les correctifs, surveiller régulièrement et améliorer la sensibilisation des développeurs.

Comment vérifier les instructions SQL Comment vérifier les instructions SQL Apr 09, 2025 pm 04:36 PM

Les méthodes pour vérifier les instructions SQL sont: Vérification de la syntaxe: utilisez l'éditeur SQL ou IDE. Vérification logique: vérifiez le nom de la table, le nom de la colonne, l'état et le type de données. Vérification des performances: utilisez Expliquez ou analysez pour vérifier les index et optimiser les requêtes. Autres vérifications: Vérifier les variables, les autorisations et les requêtes de test.

MySQL optimise-t-il les tables de verrouillage MySQL optimise-t-il les tables de verrouillage Apr 08, 2025 pm 01:51 PM

MySQL utilise des verrous partagés et des verrous exclusifs pour gérer la concurrence, fournissant trois types de verrouillage: verrous de table, verrous en ligne et verrous de page. Les verrous en ligne peuvent améliorer la concurrence et utiliser l'instruction pour la mise à jour pour ajouter des verrous exclusifs aux lignes. Les verrous pessimistes supposent des conflits et les verrous optimistes jugent les données via le numéro de version. Les problèmes de table de verrouillage communs se manifestent comme une requête lente, utilisez la commande show processList pour afficher les requêtes maintenues par la serrure. Les mesures d'optimisation incluent la sélection des indices appropriés, la réduction de la portée des transactions, les opérations par lots et l'optimisation des instructions SQL.

Comment rédiger un tutoriel sur la façon de connecter trois tables dans les instructions SQL Comment rédiger un tutoriel sur la façon de connecter trois tables dans les instructions SQL Apr 09, 2025 pm 02:03 PM

Cet article présente un tutoriel détaillé sur la jonction de trois tables à l'aide de instructions SQL, guidant les lecteurs pour apprendre à corréler efficacement les données dans différentes tables. Avec des exemples et des explications de syntaxe détaillées, cet article vous aidera à maîtriser les techniques de jonction des tables en SQL, afin que vous puissiez récupérer efficacement les informations associées de la base de données.

MySQL doit-il payer MySQL doit-il payer Apr 08, 2025 pm 05:36 PM

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Apr 11, 2025 pm 02:33 PM

La création d'une base de données Oracle n'est pas facile, vous devez comprendre le mécanisme sous-jacent. 1. Vous devez comprendre les concepts de la base de données et des SGBD Oracle; 2. Master les concepts de base tels que SID, CDB (base de données de conteneurs), PDB (base de données enfichable); 3. Utilisez SQL * Plus pour créer CDB, puis créer PDB, vous devez spécifier des paramètres tels que la taille, le nombre de fichiers de données et les chemins; 4. Les applications avancées doivent ajuster le jeu de caractères, la mémoire et d'autres paramètres et effectuer un réglage des performances; 5. Faites attention à l'espace disque, aux autorisations et aux paramètres des paramètres, et surveillez et optimisez en continu les performances de la base de données. Ce n'est qu'en le maîtrisant habilement une pratique continue que vous pouvez vraiment comprendre la création et la gestion des bases de données Oracle.

See all articles