【问题标题】:SQLX "missing destination name" when using table name in the struct tag在结构标记中使用表名时 SQLX“缺少目标名称”
【发布时间】:2018-12-08 04:29:19
【问题描述】:

问题是当我对对象使用结构标签时,它们无法正常工作。我之前做过项目,做过同样的事情,但没有问题,但我不知道为什么。

例子:

这不起作用:

type Category struct {  
   ID          int            `json:"id" db:"category.id"`  
   Name        string         `json:"name" db:"category.name"`   
   Description string         `json:"description" db:"category.description"` 
}

收到错误: missing destination name id in *[]Category

这很好用:

type Category struct {  
   ID          int            `json:"id" db:"id"`   
   Name        string         `json:"name" db:"name"`    
   Description string         `json:"description" db:"description"` 
}

查询:

result := []Category{}
query := `
    SELECT category.id, category.name, category.description FROM category;
    `
err := sqlx.Select(db, &result, query)

在 SQL 编辑器中运行查询可以正常工作。我还参与了一个专有项目,在该项目中将表名附加到标签上效果很好,但无论出于何种原因,我似乎都无法做到这一点。

感谢您的帮助,

编辑:

使用mysql

【问题讨论】:

  • 您使用的是什么数据库?看起来像在 MySQL 上,它从选定的列中省略了表名,即使它们是模棱两可的。
  • 我认为 SQLx 期望直接结构字段具有非限定名称。 “table.field”表示法被解析为嵌入式结构。我有一些嵌入其他结构的结构,我使用“table.field”表示法在单个查询中同时扫描外部结构和嵌入结构。
  • @MadWombat 问题是我已经在另一个项目中做到了(没有嵌套结构)并且它已经工作了。不幸的是,我无法链接这个东西,因为代码不是开源的。它也使用了mysql。我想知道是否有 mysql 设置或 sqlx 设置我可以更改以使其正常工作,但是几个小时的谷歌搜索和实验并没有让我到任何地方,所以我想我会问
  • @RayfenWindspear 是的,你是对的,解决方案是将columnsWithAlias=true 添加到连接中-_- 我觉得自己像个白痴
  • 这将是一个很好的机会来回答您自己的问题。我相信某个地方的某个人会发现这很有用。

标签: database go sqlx


【解决方案1】:

错误其实是在连接步骤!

我需要将columnsWithAlias=true 添加到连接参数中,并且代码运行良好。

感谢 RayfenWindspear 提示 mysql 默认不发送列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2013-06-26
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多