我有type如下:
```go
type Citizen struct {
gorm.Model
Name string `gorm:"unique"`
IDc IDCard `gorm:"foreignKey:CitizenID"`
}
type IDCard struct {
gorm.Model
Color string
CitizenID int
}
```
创建若干数据:
```go
c1 := &Citizen{Name: "Citizen_1", IDc: IDCard{Color: "yellow"}}
c2 := &Citizen{Name: "Citizen_2", IDc: IDCard{Color: "yellow"}}
c3 := &Citizen{Name: "Citizen_3", IDc: IDCard{Color: "red"}}
c4 := &Citizen{Name: "Citizen_4", IDc: IDCard{Color: "ready"}}
```
现在我想要查询一个时间段中建立的Citizen数据, 并且他们的IDCard颜色中带有"re":
```go
var result []Citizen
ss := _db
//筛选时间
ss = ss.Where("created_at BETWEEN ? AND ?", time.Unix(0, 0), time.Unix(time.Now().Unix()+100, 0))
//筛选 IDCard 颜色: 查询所有IDCard.color中带有 “re” 的 Citizen
ss = ss.Joins("IDc").Where("color LIKE ?", "%"+"re"+"%")
//查询结果
ss = ss.Preload("IDc").Find(&result)
```
但是报了错 :`ambiguous column name: created_at`, 这个是因为两个表中都有这个字段,产生的。我应该如何将这个条件应用到Citizen表中?
debug sql:
```
```
更多评论
我知道了。。。
```go
ss = ss.Where("citizens.created_at BETWEEN ? AND ?", time.Unix(0, 0), time.Unix(time.Now().Unix()+100, 0))
```
直接在created_at字段名前加表明就行了。。。gorm的玩法是在最后查找的时候才把所有条件组织拼接的,根据这个我就想到了这个解决方案。。。
#1