我要运行以下查询:

SELECT *
FROM artists
WHERE name LIKE '%roll%';

WHERE子句将是动态的,这意味着我将遍历一个映射来构建它并将其链接到主查询.

话虽如此,在try 迭代之前,我考虑过测试方法链接(我对Gorm是新手),所以我运行了:

var artist entities.Artist

query := as.db.Model(&artist)

query.Where("name LIKE ?", "%roll%")
if err := query.Find(&as.Artists).Error; err != nil {
    return err
}

如您所见,我正在链接查询的不同部分,并用Find完成它.这将返回表中的所有元素.打印出执行的查询后,我得到:

SELECT * FROM `artists`  WHERE `artists`.`deleted_at` IS NULL

没有提到LIKE条款,而且,我不知道deleted_at IS NULL是从哪里来的.虽然目前这并不重要,因为最终我也会将其添加到查询中.

但如果我 run :

var artist entities.Artist

query := as.db.Model(&artist)

if err := query.Where("name LIKE ?", "%roll%").Find(&as.Artists).Error; err != nil {
    return err
}

我正在得到我期待的结果.执行的查询是:

SELECT * FROM `artists`  WHERE `artists`.`deleted_at` IS NULL AND ((name LIKE '%roll%')) 

知道怎么回事吗?

推荐答案

我不知道deleted_at IS NULL是从哪里来的

您可能正在使用gorm.Model扩展模型,其中包括DeleteAt字段,这是将deleted_at IS NULL添加到查询的原因.DeleteAt用于判断记录是否已删除,然后不将其包括在结果中

未提及类似条款

var artist entities.Artist

query := as.db.Model(&artist)

query.Where("name LIKE ?", "%roll%") <- will return new query
if err := query.Find(&as.Artists).Error; err != nil {
    return err
}

正如Bill指出的那样,Where返回带有修改条件的新查询,但由于您没有为其分配任何内容,因此不会将其添加到查询中

var artist entities.Artist

query := as.db.Model(&artist)

if err := query.Where("name LIKE ?", "%roll%").Find(&as.Artists).Error; err != nil {
    return err
}

这里,您在新返回的查询上使用Find,该查询包含条件,因此它可以按预期工作.

要在查询中链接多个where条件,可以通过多种方式实现:

1:

var artist entities.Artist

query := as.db.Model(&artist)

query = query.Where("name LIKE ?", "%roll%")

if err := query.Find(&as.Artists).Error; err != nil {
    return err
}

2:

var artist entities.Artist

query := as.db.Model(&artist)

err := query.
          Where("name LIKE ?", "%roll%").
          Where("name LIKE ?", "%m%").
          Find(&as.Artists).
          Error
if err != nil {
    return err
}

Mysql相关问答推荐

如何在逗号分隔字符串值中使用LEFT函数

如何重新采样SQL数据库

mysql使用LIKE查找二进制字段有问题

SQL - Select 复合主键,条件为其中一个主键

计算男生的人数和女生的人数.学生是有入学记录的人

MySQL中如何对字符串进行算术运算?

Select 构成每天聚合 MAX 的各个行

如何将多个字符串插入变量

从 MySQL 8.0.12 升级到 8.0.32 时出错

生成直到 10 的平方数序列

检索按键列值分组的最新日期 (MySql)

Golang Gorm:相同的查询构造不同,抛出不同的结果

加快 MySQL 中的行计数

MySQL Workbench - 如何同步 EER 图

有什么方法可以显示`gunzip < database.sql.gz | 的进度? mysql ...`进程?

Drupal 的默认密码加密方法是什么?

我的 PDO 声明不起作用

在mysql中复制没有数据的数据库 struct (带有空表)

MySQL获取两个值之间的随机值

带有 LIKE 运算符的 Select 语句中的 MySQL case