GORM gorm 外键关联问题

dbas · 2019年10月08日 · 最后由 myml 回复于 2019年10月11日 · 1034 次阅读

FOREIGNKEY 设置外键
ASSOCIATION_FOREIGNKEY 设置关联外键

这二个有什么不一样,没理解到,

FOREIGNKEY 是指定一个字段为外键吗?ASSOCIATION_FOREIGNKEY 设置外键与另一个外键进行关联吗?官方文档:

http://gorm.io/zh_CN/docs/belongs_to.html

type Profile struct {  gorm.Model  Name      string  User      User gorm:"foreignkey:UserRefer" // 使用 UserRefer 作为外键  UserRefer uint
}

问题:gorm:"foreignkey:UserRefer"为什么要写在 User 字段后面,而不是 UserRefer?


更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

<p>官方文档:</p><p>http://gorm.io/zh_CN/docs/belongs_to.html&lt/p&gt&ltpre&gttype; Profile struct {<br> gorm.Model<br> Name string<br> User User gorm:&quot;foreignkey:UserRefer&quot; // 使用 UserRefer 作为外键<br> UserRefer uint</pre><pre>}</pre><p>问题:<span style="background-color: rgb(245, 245, 245); color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px;">gorm:&quot;foreignkey:UserRefer&quot;为什么要写在 User 字段后面,而不是</span><span style="background-color: rgb(245, 245, 245); color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px;"> UserRefer?</span></p>

<p>用外键约束的太紧,尽量别用</p>

<p>gorm 的外键更多的是为了关联而非约束。</p><pre><code><p>type Profile struct { <br> ID int<br> Name string <br> User User gorm:&quot;foreignkey:UserRefer&quot;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: rgb(245, 245, 245);">UserRefer </span><span style="background-color: rgb(245, 245, 245);">uint</span></p><p>}</p></code></pre><p>foreignkey:UserRefer 表示将 UserRefer 和 User.ID 关联,当查询 Profile 时,可以预加载 Profile.UserRefer 对应的 User,即 Profile =&gt; User 一对一的关系<br></p><p>执行的 sql 语句类似这样</p><pre><code>select * from profile<br>select * from user where id in (UserReferer)</code></pre><p>可使用<span style="background-color: rgb(245, 245, 245); color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px;">db.LogMode(</span><span style="background-color: rgb(245, 245, 245); color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px;">true</span><span style="background-color: rgb(245, 245, 245); color: rgb(51, 51, 51); font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px;">) 打开日志查看具体执行的 sql 语句</span></p>

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册