{"id":41081,"date":"2024-12-01T12:28:33","date_gmt":"2024-12-01T04:28:33","guid":{"rendered":"https:\/\/fwq.ai\/blog\/41081\/"},"modified":"2024-12-01T12:28:33","modified_gmt":"2024-12-01T04:28:33","slug":"gorm-%e7%94%a8-scan-%e5%b7%a6%e8%bf%9e%e6%8e%a5","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/41081\/","title":{"rendered":"Gorm \u7528 Scan() \u5de6\u8fde\u63a5"},"content":{"rendered":"<p><b><\/b> <\/p>\n<p>\u5f53\u524d\u4f4d\u7f6e\uff1a <span>&gt;<\/span>  <span>&gt;<\/span>  <span>&gt;<\/span>  <span>&gt;<\/span> <span>Gorm \u7528 Scan() \u5de6\u8fde\u63a5<\/span><\/p>\n<h1>Gorm \u7528 Scan() \u5de6\u8fde\u63a5<\/h1>\n<p><span>\u6765\u6e90\uff1astackoverflow<\/span><br \/>\n<span>2024-04-18 23:00:49<\/span><br \/>\n<span><i><\/i>0\u6d4f\u89c8<\/span><br \/>\n<span style=\"cursor: pointer\"><i><\/i>\u6536\u85cf<\/span> <\/p>\n<p>\u5c0f\u4f19\u4f34\u4eec\u6709\u6ca1\u6709\u89c9\u5f97\u5b66\u4e60<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\">Golang<\/span>\u5f88\u6709\u610f\u601d\uff1f\u6709\u610f\u601d\u5c31\u5bf9\u4e86\uff01\u4eca\u5929\u5c31\u7ed9\u5927\u5bb6\u5e26\u6765<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\">\u300aGorm \u7528 Scan() \u5de6\u8fde\u63a5\u300b<\/span>\uff0c\u4ee5\u4e0b\u5185\u5bb9\u5c06\u4f1a\u6d89\u53ca\u5230<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\"><\/span>\uff0c\u82e5\u662f\u5728\u5b66\u4e60\u4e2d\u5bf9\u5176\u4e2d\u90e8\u5206\u77e5\u8bc6\u70b9\u6709\u7591\u95ee\uff0c\u6216\u8bb8\u770b\u4e86\u672c\u6587\u5c31\u80fd\u5e2e\u5230\u4f60\uff01<\/p>\n<p> \u95ee\u9898\u5185\u5bb9<br \/>\n <\/p>\n<p>\u6211\u6b63\u5728\u5c1d\u8bd5\u52a0\u5165 <code>class<\/code> \u548c <code>booking<\/code> \u4e0a\u7684 <code>classes.id = bookings.class_id<\/code> \u5e76\u83b7\u53d6 <code>displaybooking<\/code> \u7c7b\u578b\u7684\u7ed3\u679c<\/p>\n<pre>type class struct {\n    id   int    `json:\"id\"`\n    name string `json:\"name\"`\n}\n\ntype booking struct {\n    id      int    `json:\"id\"`\n    user    string `json:\"user\"`\n    members int    `json:\"members\"`\n    classid int    `json:classid`\n    \/\/class   class  `gorm:\"constraint:onupdate:cascade,ondelete:set null;\"`\n}\ntype displaybooking struct {\n    id        int    `json:\"id\"`\n    user      string `json:\"user\"`\n    members   int    `json:\"members\"`\n    classid   int    `json:classid`\n    classname string `json:\"classname\"`\n}<\/pre>\n<p>\u4e3a\u6b64\uff0c\u6211\u5c1d\u8bd5\u4e86 gorm \u7684 <code>scan()<\/code> \u548c <code>rows()<\/code> \u65b9\u6cd5<\/p>\n<pre>func returnallbookings(w http.responsewriter, r *http.request) {\n    bookings := []displaybooking{}\n\n    db.model(&amp;booking{}).select(\"bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name\").joins(\"left join classes on bookings.class_id = classes.id\").scan(&amp;bookings)\n\n    fmt.println(\"endpoint hit: returnallbookings\")\n\n    rows, err := db.table(\"bookings\").select(\"bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name\").joins(\"left join classes on bookings.class_id = classes.id\").rows()\n    if err != nil {\n        return\n    }\n\n    for rows.next() {\n        log.println(rows)\n    }\n    json.newencoder(w).encode(bookings)\n}<\/pre>\n<p><code>scan()<\/code> \u5728 class_name \u5b57\u6bb5\u4e2d\u8fd4\u56de\u7a7a\u503c\uff0c\u867d\u7136 <code>rows()<\/code> \u4f3c\u4e4e\u53ef\u4ee5\u5b8c\u6210\u8fd9\u9879\u5de5\u4f5c\uff0c\u4f46\u8f93\u51fa\u683c\u5f0f\u4e0d\u662f json \u7f16\u7801 <code>scan()<\/code> \u8f93\u51fa<\/p>\n<pre>[{\"id\":1,\"user\":\"test1\",\"members\":1,\"classid\":2,\"classname\":\"\"},{\"id\":2,\"user\":\"test2\",\"members\":2,\"classid\":1,\"classname\":\"\"}]<\/pre>\n<p><code>rows()<\/code> \u8f93\u51fa\uff08\u63a7\u5236\u53f0\uff09 &#8211; \u7c97\u4f53\u503c\u662f\u6b63\u786e\u7684\uff0c\u4f46\u6709\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f<\/p>\n<pre>my-go-app_1  | 2021\/04\/09 07:42:09 &amp;{0xc00021e1b0 0x6dcfa0 0xc00026adc0 &lt;nil&gt; &lt;nil&gt; {{0 0} 0 0 0 0} false &lt;nil&gt; **[1 test1 1 2 business]**}\nmy-go-app_1  | 2021\/04\/09 07:42:09 &amp;{0xc00021e1b0 0x6dcfa0 0xc00026adc0 &lt;nil&gt; &lt;nil&gt; {{0 0} 0 0 0 0} false &lt;nil&gt; **[2 test2 2 1 first]**}<\/pre>\n<p>\u6709\u6ca1\u6709\u529e\u6cd5\u8ba9\u4ee3\u7801\u4e0e <code>scan()<\/code> \u51fd\u6570\u4e00\u8d77\u4f7f\u7528\uff1f<\/p>\n<p> <\/p>\n<h2>\u6b63\u786e\u7b54\u6848<\/h2>\n<p> <\/p>\n<p>\u4f60\u53ef\u4ee5\u7528<code>scan<\/code>\u6765\u505a\u5230\u8fd9\u4e00\u70b9\uff0c<code>displaybooking<\/code>\u7684<code>class_name<\/code>\u5b57\u6bb5\u6ca1\u6709\u503c\u662f\u56e0\u4e3a\u8be5\u5b57\u6bb5\u9ed8\u8ba4\u7684<code>gorm\u6807\u7b7e\u540d\u79f0<\/code>\u662f<code>class_name<\/code>\uff0c\u4f46\u662f\u4f60\u8981\u5339\u914d\u7684\u5217\u662f<code>namezqbendcz qb\uff0c\u8fd9\u4e24\u4e2a\u4e0d\u5339\u914d\u3002&lt;\/p&gt; &lt;p&gt;\u60a8\u53ef\u4ee5\u6dfb\u52a0\u5217\u522b\u540d\u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u5c06 <code>scan()<\/code> \u8868\u8fbe\u5f0f\u66f4\u6539\u4e3a\u4ee5\u4e0b\u8868\u8fbe\u5f0f\uff1a<\/code><\/p>\n<pre>db.Debug().Model(&amp;Booking{}).Select(\"bookings.id, bookings.user, bookings.members, bookings.class_id, classes.name as class_name\").Joins(\"left join classes on bookings.class_id = classes.id\").Scan(&amp;bookings)<\/pre>\n<p>\u4ee5\u4e0a\u5c31\u662f\u300aGorm \u7528 Scan() \u5de6\u8fde\u63a5\u300b\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u5173\u4e8e\u7684\u8d44\u6599\u8bf7\u5173\u6ce8\u7c73\u4e91\u516c\u4f17\u53f7\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f53\u524d\u4f4d\u7f6e\uff1a &gt; &gt; &gt; &gt; Gorm \u7528 Scan() \u5de6\u8fde\u63a5 Gorm \u7528 Scan() \u5de6\u8fde\u63a5 \u6765\u6e90\uff1astackoverflow 2024-04-18 23:00:49 0\u6d4f\u89c8 \u6536\u85cf \u5c0f\u4f19\u4f34\u4eec\u6709\u6ca1\u6709\u89c9\u5f97\u5b66\u4e60Golang\u5f88\u6709\u610f\u601d\uff1f\u6709\u610f\u601d\u5c31\u5bf9\u4e86\uff01\u4eca\u5929\u5c31\u7ed9\u5927\u5bb6\u5e26\u6765\u300aGorm \u7528 Scan() \u5de6\u8fde\u63a5\u300b\uff0c\u4ee5\u4e0b\u5185\u5bb9\u5c06\u4f1a\u6d89\u53ca\u5230\uff0c\u82e5\u662f\u5728\u5b66\u4e60\u4e2d\u5bf9\u5176\u4e2d\u90e8\u5206\u77e5\u8bc6\u70b9\u6709\u7591\u95ee\uff0c\u6216\u8bb8\u770b\u4e86\u672c\u6587\u5c31\u80fd\u5e2e\u5230\u4f60\uff01 \u95ee\u9898\u5185\u5bb9 \u6211\u6b63\u5728\u5c1d\u8bd5\u52a0\u5165 class \u548c booking \u4e0a\u7684 classes.id = bookings.class_id \u5e76\u83b7\u53d6 displaybooking \u7c7b\u578b\u7684\u7ed3\u679c type class struct { id int `json:&#8221;id&#8221;` name string `json:&#8221;name&#8221;` } type booking struct { id int `json:&#8221;id&#8221;` user string `json:&#8221;user&#8221;` [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-41081","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}