3

我有一个这样的模型:

type Course struct {
    Name string `db:"course_name"`
}

type Group struct {
    Course *Course
}
type Groups []Group

当我尝试使用这样的查询为组执行 sqlx.Select 时:

SELECT c.name as course_name FROM courses as c;

我明白了

*main.Groups 中缺少目的地名称 course_name

错误。

这段代码有什么问题?

4

3 回答 3

1

sqlx.Select当您选择多行并且想要将结果扫描到切片中时需要使用,就像您的查询一样,否则使用sqlx.Get单行。

此外,您不能直接扫描到Group结构中,因为它的任何字段都没有被标记(与Course结构不同),并且该Course字段没有嵌入。

尝试:

course := Course{}
courses := []Course{}

db.Get(&course, "SELECT name AS course_name FROM courses LIMIT 1")
db.Select(&courses, "SELECT name AS course_name FROM courses")
于 2017-07-08T10:56:03.250 回答
0

好的,所以当您使用带有 Sqlx 的嵌入式结构时,大写很重要,至少在我的情况下是这样。

您需要引用 sql 中的嵌入式结构,如下所示:

select name as "course.name" from courses...

请注意,它course是小写的,并且命名涉及表和列之间的点/句点。

那么你的GetorSelect应该可以正常工作。

于 2018-04-25T16:26:51.980 回答
0

我改为Course *Course-Course Course没有效果。当我让它像这样嵌入时:

type Group struct {
    Course
}

有效。

这也是有效的:

type Group struct {
    *Course
}

看起来 sqlx 除了嵌入字段之外什么都不懂。

于 2017-07-08T11:38:14.557 回答