cari
Rumahpembangunan bahagian belakangGolangBagaimana untuk menanyakan model yang nilai tertanam hubungan adalah sama dengan nilai tertentu?

Bagaimana untuk menanyakan model yang nilai tertanam hubungan adalah sama dengan nilai tertentu?

Apabila membangunkan dan mereka bentuk model pangkalan data, kadangkala kita perlu bertanya sama ada nilai terbenam dalam perhubungan itu sama dengan nilai tertentu. Masalah ini sering dihadapi dalam aplikasi praktikal, tetapi ia mungkin tidak mudah untuk diselesaikan. Dalam artikel ini, saya akan memperkenalkan anda kepada model dengan cara yang cekap untuk bertanya sama ada nilai terbenam perhubungan adalah sama dengan nilai tertentu. Tidak perlu risau, saya akan menerangkannya dengan jelas dalam bahasa yang ringkas dan mudah difahami untuk membantu anda memahami dan mengaplikasikannya dengan cepat dalam pembangunan sebenar. Mari lihat!

Kandungan soalan

Saya mempunyai dua model berbeza (carstypes),它们彼此相关(属于关系),其中两个模型都有一个嵌入式 struct 用于公共数据(post)。我想检索某些 types,但只想收到 postcars jawapan dengan nilai yang sama dengan nilai tertentu.

shorty berkata, berdasarkan model di bawah, saya ingin mencari semua types,其中cars.post.published ​​sama dengan benar.

Model

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"`
}

Gunakan db.preload("car").find(&type) 我能够在答案对象中获取 car 值。如果我在 car 结构上使用 where() 函数(即 where(car{brand: "volvo"}) 我可以通过 brand 获取值,但是当使用 post 时(即 where(car{post: post {published: true})) dan ia hanya akan mengembalikan segala-galanya.

Saya lebih baik menggunakan model utama yang perlu ditanya sebagai asas untuk fungsi where(). Contohnya:

q := Type{Car: Car{Post: Post{Published: true}}}
db.Preload("Car").Where(q).Find(&Type)

...tetapi itu nampaknya tidak berkesan. Bagaimana untuk melaksanakan pertanyaan sedemikian tanpa menggunakan penjana sql mentah?

Penyelesaian

Saya dapat menyelesaikan masalah anda dengan cara berikut. Mula-mula saya akan berkongsi kod dan kemudian saya akan membincangkan perkara penting yang patut dijelaskan.

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

Sekarang, izinkan saya berkongsi beberapa pandangan.

Definisi struktur

Saya mengubahnya sedikit untuk mengendalikan adegan ini. Saya menambah rakan sejawatannya daripada definisi struktur type 结构中删除了 car 字段,并在 car.

Tetapan dan Benih

Kemudian, saya menyediakan sambungan pangkalan data melalui gorm. Saya menyegerakkan model yang ditakrifkan dalam kod dengan hubungan yang wujud dalam pangkalan data. Untuk menunjukkan, saya menyemai beberapa data palsu secara manual.

Baca logik

Kemudian, saya menjalankan pertanyaan untuk mendapatkan data yang berkaitan. Saya menggunakan kaedah berikut:

  1. debug: digunakan untuk merekod penyata sql sebenar
  2. model: digunakan untuk menyatakan perhubungan yang ingin kita kendalikan
  3. preload:用于加载typeBerkaitan
  4. where: digunakan untuk menentukan syarat (dalam kes kami, penapis berada pada struktur terbenam)
  5. find: digunakan untuk memetakan hasil kepada pembolehubah

Sila beritahu saya jika ini membantu menyelesaikan masalah anda, terima kasih!

Atas ialah kandungan terperinci Bagaimana untuk menanyakan model yang nilai tertanam hubungan adalah sama dengan nilai tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:stackoverflow. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Golang dan Python: Memahami PerbezaanGolang dan Python: Memahami PerbezaanApr 18, 2025 am 12:21 AM

Perbezaan utama antara Golang dan Python adalah model konvensional, sistem jenis, prestasi dan kelajuan pelaksanaan. 1. Golang menggunakan model CSP, yang sesuai untuk tugas serentak yang tinggi; Python bergantung pada multi-threading dan gil, yang sesuai untuk tugas I/O-intensif. 2. Golang adalah jenis statik, dan Python adalah jenis dinamik. 3. Golang mengumpulkan kelajuan pelaksanaan bahasa adalah cepat, dan pembangunan bahasa yang ditafsirkan Python adalah pantas.

Golang vs C: Menilai perbezaan kelajuanGolang vs C: Menilai perbezaan kelajuanApr 18, 2025 am 12:20 AM

Golang biasanya lebih perlahan daripada C, tetapi Golang mempunyai lebih banyak kelebihan dalam pengaturcaraan serentak dan kecekapan pembangunan: 1) Koleksi sampah Golang dan model konkurensi menjadikannya berfungsi dengan baik dalam senario konvensyen yang tinggi; 2) C memperoleh prestasi yang lebih tinggi melalui pengurusan memori manual dan pengoptimuman perkakasan, tetapi mempunyai kerumitan pembangunan yang lebih tinggi.

Golang: bahasa utama untuk pengkomputeran awan dan devOpsGolang: bahasa utama untuk pengkomputeran awan dan devOpsApr 18, 2025 am 12:18 AM

Golang digunakan secara meluas dalam pengkomputeran awan dan devOps, dan kelebihannya terletak pada kesederhanaan, kecekapan dan keupayaan pengaturcaraan serentak. 1) Dalam pengkomputeran awan, Golang dengan cekap mengendalikan permintaan serentak melalui mekanisme goroutine dan saluran. 2) Di DevOps, kompilasi cepat Golang dan ciri-ciri silang platform menjadikannya pilihan pertama untuk alat automasi.

Golang dan C: Memahami kecekapan pelaksanaanGolang dan C: Memahami kecekapan pelaksanaanApr 18, 2025 am 12:16 AM

Golang dan C masing -masing mempunyai kelebihan sendiri dalam kecekapan prestasi. 1) Golang meningkatkan kecekapan melalui pengumpulan goroutine dan sampah, tetapi boleh memperkenalkan masa jeda. 2) C menyedari prestasi tinggi melalui pengurusan memori manual dan pengoptimuman, tetapi pemaju perlu menangani kebocoran memori dan isu -isu lain. Apabila memilih, anda perlu mempertimbangkan keperluan projek dan timbunan teknologi pasukan.

Golang vs Python: Konvensyen dan MultithreadingGolang vs Python: Konvensyen dan MultithreadingApr 17, 2025 am 12:20 AM

Golang lebih sesuai untuk tugas -tugas kesesuaian yang tinggi, sementara Python mempunyai lebih banyak kelebihan dalam fleksibiliti. 1.Golang dengan cekap mengendalikan kesesuaian melalui goroutine dan saluran. 2. Pilihannya harus berdasarkan keperluan khusus.

Golang dan C: Perdagangan dalam prestasiGolang dan C: Perdagangan dalam prestasiApr 17, 2025 am 12:18 AM

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

Golang vs Python: Aplikasi dan Kes GunakanGolang vs Python: Aplikasi dan Kes GunakanApr 17, 2025 am 12:17 AM

PilihgolangforhighperformanceandConcurrency, IdealForBackEndServicesandnetworkprogramming; SelectPythonForrapidDevelopment, datascience, danMachinelearningDuetoitSversativilityAndextiveLibraries.

Golang vs Python: Perbezaan dan Persamaan UtamaGolang vs Python: Perbezaan dan Persamaan UtamaApr 17, 2025 am 12:15 AM

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.