我用golang开发web应用程序。 我使用库gocraft/dbr作为O / R Mapper。
我有两张桌子:图片和条目。 我加入他们的桌子,我想得到image_url。
type Image struct {
ImageUrl dbr.NullString `db:"image_url"`
}
type Entry struct {
CompanyImageID dbr.NullInt64 `db:"company_image_id"`
CompanyImage Image
EyecatchIamgeID dbr.NullInt64 `db:"eyecatch_image_id"`
EyecatchImage Image
}
然后我在下面尝试了:
var entry Entry
sess.Select("*").From("entry").
LeftJoin(dbr.I("image").As("eyecatch_image"), "entry.eyecatch_image_id = eyecatch_image.id").
LeftJoin(dbr.I("image").As("company_image"), "entry.company_image_id = company_image.id").
Load(&entry)
log.Println("company:", entry.CompanyImage)
log.Println("eyecatch:", entry.EyecatchImage)
结果:
company: {{{https://company_image_url.png true}}}
eyecatch: {{{ false}}}
我希望下面,但它没有像预期的那样。
company: {{{https://company_image_url.png true}}}
eyecatch: {{{{http://eyecatch_image_url.png true}}}
当我尝试更改下面的连接条件时:
sess.Select("*").From("entry").
LeftJoin(dbr.I("image").As("eyecatch_image"), "entry.eyecatch_image_id = eyecatch_image.id")
Load(&entry)
结果:
company: {{{http://eyecatch_image_url.png true}}}
eyecatch: {{{ false}} {{ false}}}}
我不知道如何使用多个条件的连接。
谢谢。
答案 0 :(得分:1)
文档非常糟糕 - 似乎他们放弃了发布图书馆的想法。有一个open pull request that provides a little better documentation.。在这里,作者描述了您可以创建这样的多重条件:
cond:= dbr.And(
dbr.Or(
dbr.Gt("created_at", "2015-09-10"),
dbr.Lte("created_at", "2015-09-11"),
),
dbr.Eq("title", "hello world"),
)
然后在任何声明中使用条件:
sess.Select("*").From("entry").
LeftJoin(dbr.I("image").As("eyecatch_image"), cond)
Load(&entry)