Несколько методов получения сообщений пользователей по определенным критериям с использованием GORM в Go

Похоже, что предоставленная вами функция написана на языке программирования Go. Похоже, это функция, которая извлекает сообщения на основе определенных критериев из базы данных с использованием библиотеки GORM. Вот объяснение параметров функции:

  • uid(строка): представляет идентификатор пользователя, для которого извлекаются сообщения. Оно может относиться к конкретному пользователю.
  • allUsers(bool): логический флаг, указывающий, следует ли получать сообщения для всех пользователей или только для конкретного пользователя. Если allUsersимеет значение true, будут получены сообщения от всех пользователей.
  • category(int64): представляет идентификатор категории, для которой извлекаются сообщения. Оно может относиться к определенной категории.
  • published(строка): представляет дату или время публикации сообщений. Это может относиться к конкретному периоду времени.
  • db(*gorm.DB): представляет экземпляр базы данных GORM, используемый для запроса данных.

Чтобы предоставить несколько методов реализации этой функциональности, вот несколько подходов:

Метод 1: использование построителя запросов GORM

func getUsersPost(uid string, allUsers bool, category int64, published string, db *gorm.DB) (posts []Post, err error) {
    query := db.Model(&Post{})
    if !allUsers {
        query = query.Where("user_id = ?", uid)
    }
    if category != 0 {
        query = query.Where("category_id = ?", category)
    }
    if published != "" {
        query = query.Where("published = ?", published)
    }
    err = query.Find(&posts).Error
    return
}

Метод 2: использование необработанных SQL-запросов

func getUsersPost(uid string, allUsers bool, category int64, published string, db *gorm.DB) (posts []Post, err error) {
    sql := "SELECT * FROM posts WHERE "
    if !allUsers {
        sql += "user_id = '" + uid + "' AND "
    }
    if category != 0 {
        sql += "category_id = " + strconv.FormatInt(category, 10) + " AND "
    }
    if published != "" {
        sql += "published = '" + published + "' AND "
    }
    sql += "1=1"
    err = db.Raw(sql).Scan(&posts).Error
    return
}

Обратите внимание, что приведенные выше примеры предполагают наличие структуры Postи соответствующей таблицы базы данных с именем posts, которая соответствует структуре Post. >структура.