Jadual Kandungan
Kandungan soalan
解决方法
Rumah pembangunan bahagian belakang Golang Bagaimana untuk menggunakan Raw() untuk Preload() dalam Gorm?

Bagaimana untuk menggunakan Raw() untuk Preload() dalam Gorm?

Feb 15, 2024 am 10:39 AM
pergi bahasa pernyataan sql

如何在 Gorm 中使用 Raw() 进行 Preload() ?

editor php Yuzai akan memperkenalkan kepada anda cara menggunakan Raw() untuk Pramuat() dalam Gorm. Gorm ialah perpustakaan ORM bahasa Go yang berkuasa yang menyediakan banyak kaedah mudah untuk operasi pangkalan data. Dalam sesetengah kes, kami mungkin perlu menggunakan pernyataan SQL asli untuk pertanyaan, dan juga ingin menggunakan kaedah Pramuat() untuk pramuat data berkaitan. Dengan menggunakan kaedah Raw(), kita boleh menggabungkan Preload() dalam Gorm untuk mencapai keperluan ini. Seterusnya, kami akan menerangkan langkah-langkah khusus secara terperinci untuk membantu anda memahami dan menggunakan teknik ini dengan lebih baik.

Kandungan soalan

Dalam projek saya sebelum ini, saya perlu melakukan beberapa pertanyaan yang kompleks, jadi saya menggunakan Raw(). Pertanyaannya kelihatan seperti ini:

SELECT tbl1.id, tbl1.some_name, tbl5.some_status, tbl1.some_tbl2_id, tbl1.type_id, tbl1.created_at, tbl5.name
FROM table1 tbl1
JOIN table2 tbl2 ON tbl1.some_tbl2_id = tbl2.id
JOIN table3 tbl3 ON tbl3.edge_device_info_id = tbl2.id
JOIN table4 tbl4 ON tbl4.id = tbl3.account_id
LEFT JOIN table5 tbl5 ON tbl5.tbl1_id = tbl1.id
WHERE tbl5.tbl1_id IS NULL OR tbl5.updated_at = (
    SELECT MAX(updated_at)
    FROM table5
    WHERE tbl1_id = tbl1.id
)
ORDER BY tbl1.created_at ASC;
Salin selepas log masuk

Saya tidak pasti sama ada saya boleh melakukan ini sepenuhnya menggunakan kandungan/kaedah dalam gorm, jadi saya hanya menggunakan pertanyaan mudah yang saya lebih biasa. Sekarang, saya ingin mendapatkan rekod yang dikaitkan dengan tbl1.type_id. Saya cuba menambah Preload() sebelum gorm 中的内容/方法完全做到这一点,所以我只是使用我更熟悉的简单查询。现在,我想获取与 tbl1.type_id 关联的记录。我尝试在 Raw() 之前添加 Preload() 但这似乎不起作用,因为检查我用来存储查询结果的结构数组的内容似乎没有填充 Type tetapi itu nampaknya tidak berfungsi kerana memeriksa kandungan susunan struktur yang saya gunakan untuk menyimpan hasil pertanyaan nampaknya tidak mempunyai < kod>Jenis diisi.

Kemas kini:

Setelah melihat sekeliling saya menemui cara untuk menukar pertanyaan Raw() 查询转换为 gorm di atas kepada pautan kaedah gorm. Ia kelihatan seperti ini:

Model(models.ActuatorDeviceInfo{}).Preload("ActuatorDeviceInfo.Type").
Select("actuator_device_infos.*, actuator_device_infos.id, at.*").
Joins("JOIN edge_device_infos edi ON actuator_device_infos.parent_edge_device_id = edi.id").
Joins("JOIN user_owned_edge_devices ae ON ae.edge_device_info_id = edi.id").
Joins("JOIN accounts acc ON acc.id = ae.account_id").
Joins("JOIN actuator_types at ON at.id = actuator_device_infos.type_id").
Joins("LEFT JOIN actuator_updates au ON au.actuator_device_info_id = actuator_device_infos.id").
Where("au.actuator_device_info_id IS NULL OR au.updated_at = (?)",
    helpers.GetDB().Model(&models.ActuatorUpdate{}).Select("MAX(updated_at)").
    Where("au.actuator_device_info_id = actuator_device_infos.id")).
Order("actuator_device_infos.created_at DESC").
Scan(&actuator_device_infos)
Salin selepas log masuk

Ia berfungsi sama seperti pertanyaan Raw() 查询一样,但它仍然缺少一些东西,这就是获取关联表到 table1 的方法(它是方法链接上的actuator_device_infos,有点懒惰仍然清理新代码)。即使我在查询构建方法之前添加 Preload() ,它似乎也不会影响结果记录。我需要使用 Model() 进行方法链接,并且缺少它会产生错误,因为 Model() 中的解析表将用于最终查询的 FROM 部分,因此 gorm 应该有所了解我想要预加载的东西存在。我预加载的是 actuator_types,它已经有一个 Joins(),如上面的代码所示。

解决方法

感谢@Trock的评论,我终于找到了最后一块拼图。看来我只需要在方法链的末尾使用 Find() ,这样 Preload() 就可以工作。最终的代码看起来就像我在问题上的代码,但我用 Find() 替换了 Scan() 。我尝试对 Raw() 代码执行相同的操作,并且效果也很好。 gorm sebelumnya, tetapi ia masih kehilangan sesuatu, iaitu kaedah untuk mendapatkan jadual yang berkaitan ke table1 (ia adalah actuator_device_infos pada pautan kaedah, masih malas untuk membersihkan kod baharu). Walaupun saya menambah Praload() sebelum kaedah binaan pertanyaan, ia nampaknya tidak menjejaskan rekod yang terhasil. Saya perlu menggunakan Model() untuk rantaian kaedah, dan kehilangannya menghasilkan ralat kerana jadual parsing dalam Model() akan digunakan untuk FROM, jadi <code>gorm sepatutnya mempunyai idea bahawa bahan yang saya ingin pramuat wujud. Yang saya pramuat ialah actuator_types, yang sudah mempunyai Joins() seperti yang ditunjukkan dalam kod di atas.

🎜Penyelesaian🎜🎜Terima kasih kepada komen @Trock, akhirnya saya menemui bahagian terakhir teka-teki itu. Nampaknya saya hanya perlu menggunakan Find() pada penghujung rantai kaedah supaya Preload() akan berfungsi. Kod akhir kelihatan seperti kod yang saya ada dalam soalan, tetapi saya menggantikan Scan() dengan Find(). Saya cuba melakukan perkara yang sama dengan kod 🎜 dan ia juga berfungsi dengan baik. gorm harus menyebut mekanisme ini. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan Raw() untuk Preload() dalam Gorm?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

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

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1668
14
Tutorial PHP
1273
29
Tutorial C#
1256
24
Cara membuat jadual dengan SQL Server menggunakan pernyataan SQL Cara membuat jadual dengan SQL Server menggunakan pernyataan SQL Apr 09, 2025 pm 03:48 PM

Cara membuat jadual menggunakan penyataan SQL di SQL Server: Buka SQL Server Management Studio dan sambungkan ke pelayan pangkalan data. Pilih pangkalan data untuk membuat jadual. Masukkan pernyataan Buat Jadual untuk menentukan nama jadual, nama lajur, jenis data, dan kekangan. Klik butang Jalankan untuk membuat jadual.

Cara Menulis Tutorial Cara Menghubungkan Tiga Jadual dalam Penyataan SQL Cara Menulis Tutorial Cara Menghubungkan Tiga Jadual dalam Penyataan SQL Apr 09, 2025 pm 02:03 PM

Artikel ini memperkenalkan tutorial terperinci mengenai menyertai tiga jadual menggunakan penyataan SQL, membimbing pembaca untuk mengetahui cara mengaitkan data secara berkesan dalam jadual yang berbeza. Dengan contoh -contoh dan penjelasan sintaks yang terperinci, artikel ini akan membantu anda menguasai teknik -teknik jadual dalam SQL, supaya anda dapat mengambil maklumat yang berkaitan dengan pangkalan data dari pangkalan data.

Cara menilai suntikan SQL Cara menilai suntikan SQL Apr 09, 2025 pm 04:18 PM

Kaedah untuk menilai suntikan SQL termasuk: mengesan input yang mencurigakan, melihat pernyataan SQL asal, menggunakan alat pengesanan, melihat log pangkalan data, dan melakukan ujian penembusan. Selepas suntikan dikesan, ambil langkah -langkah untuk menampal kelemahan, sahkan patch, memantau secara teratur, dan meningkatkan kesedaran pemaju.

Cara membuat pangkalan data mysql menggunakan phpmyadmin Cara membuat pangkalan data mysql menggunakan phpmyadmin Apr 10, 2025 pm 10:48 PM

PHPMyAdmin boleh digunakan untuk membuat pangkalan data dalam projek PHP. Langkah -langkah khusus adalah seperti berikut: Log masuk ke phpmyadmin dan klik butang "Baru". Masukkan nama pangkalan data yang ingin anda buat, dan perhatikan bahawa ia mematuhi peraturan penamaan MySQL. Tetapkan set aksara, seperti UTF-8, untuk mengelakkan masalah.

Cara Memeriksa Penyataan SQL Cara Memeriksa Penyataan SQL Apr 09, 2025 pm 04:36 PM

Kaedah untuk menyemak pernyataan SQL adalah: Pemeriksaan Sintaks: Gunakan editor SQL atau IDE. Pemeriksaan logik: Sahkan nama jadual, nama lajur, keadaan, dan jenis data. Pemeriksaan Prestasi: Gunakan Jelaskan atau Analisis untuk memeriksa indeks dan mengoptimumkan pertanyaan. Pemeriksaan lain: Periksa pembolehubah, kebenaran, dan pertanyaan ujian.

Bagaimana untuk menambah lajur dalam PostgreSQL? Bagaimana untuk menambah lajur dalam PostgreSQL? Apr 09, 2025 pm 12:36 PM

PostgreSQL Kaedah untuk menambah lajur adalah dengan menggunakan arahan Alter Table dan pertimbangkan butiran berikut: Jenis Data: Pilih jenis yang sesuai untuk lajur baru untuk menyimpan data, seperti int atau varchar. Lalai: Tentukan nilai lalai lajur baru melalui kata kunci lalai, mengelakkan nilai null. Kekangan: Tambah tidak batal, unik, atau semak kekangan yang diperlukan. Operasi serentak: Gunakan urus niaga atau mekanisme kawalan konvensyen lain untuk mengendalikan konflik kunci apabila menambah lajur.

Cara Menggunakan Penyata SQL Masukkan Cara Menggunakan Penyata SQL Masukkan Apr 09, 2025 pm 06:15 PM

Pernyataan sisipan SQL digunakan untuk memasukkan data ke dalam jadual. Langkah -langkah termasuk: Tentukan jadual sasaran untuk menyenaraikan lajur yang akan dimasukkan. Tentukan nilai yang akan dimasukkan (urutan nilai mesti sesuai dengan nama lajur)

Panduan untuk penggunaan phpmyadmin komprehensif Panduan untuk penggunaan phpmyadmin komprehensif Apr 10, 2025 pm 10:42 PM

Phpmyadmin bukan sekadar alat pengurusan pangkalan data, ia dapat memberi anda pemahaman yang mendalam tentang MySQL dan meningkatkan kemahiran pengaturcaraan. Fungsi teras termasuk pelaksanaan CRUD dan SQL Query, dan penting untuk memahami prinsip -prinsip penyataan SQL. Petua lanjutan termasuk mengeksport/mengimport data dan pengurusan kebenaran, yang memerlukan pemahaman keselamatan yang mendalam. Isu -isu yang berpotensi termasuk suntikan SQL, dan penyelesaiannya adalah pertanyaan parameter dan sandaran. Pengoptimuman prestasi melibatkan pengoptimuman penyataan SQL dan penggunaan indeks. Amalan terbaik menekankan spesifikasi kod, amalan keselamatan, dan sandaran biasa.

See all articles