Как найти в ГОРМ объекты с условием внешнего ключа? - PullRequest
0 голосов
/ 05 августа 2020

Я бы хотел установить условие where с полем внешнего ключа в GORM, но я не могу этого сделать. Сейчас я имею дело с двумя моделями.

type Call struct {
    ID          uint    `gorm:"primary_key"`
    Status      string  `gorm:"type:varchar(50)"`       
    ConditionID uint
    Condition   Condition
    JoinStatus  *string `gorm:"type:varchar(50)"`    
    CreatedAt time.Time
    UpdatedAt time.Time
}

type Condition struct {
    ID            uint `gorm:"primary_key"`
    BigLocationID uint
    BigLocation   Location
    ClassID       uint
    Class         *Class
    MixStr        *string `gorm:"type:text"`
    MixClassIDs   *string `gorm:"type:varchar(50)"`
    SituationIDs  *string `gorm:"type:varchar(255)"`
    GiftPoint     int     `gorm:"type:integer;default:0"`
    Desired       *string `gorm:"type:varchar(255)"`
    CreatedAt     time.Time
    UpdatedAt     time.Time
}

Теперь я хочу получить список вызовов, условия которых удовлетворяют некоторым требованиям. ID класса Condition должен быть 3 или MixClassIDs содержит 3. Я могу сделать запрос Condition и получить их список.

query := fmt.Sprintf("class_id = %d OR mix_class_ids REGEXP ',%d,'", 3, 3)
var conditions []Condition
err := DB.Where(query).Find(&conditions).Error

Но это не то, что я хочу. Я хочу получать звонки с такими условиями сразу. Как я могу получить список вызовов, в котором их Condition ClassID равен 3 или MixClassIDs содержит "3"? Пожалуйста, помогите мне.

...