id: predicates

title: Predicates

字段条件

  • 布尔:
    • =, !=
  • 数值:
    • =, !=, >, <, >=, <=,
    • IN, NOT IN
  • 时间:
    • =, !=, >, <, >=, <=
    • IN, NOT IN
  • 字符:
    • =, !=, >, <, >=, <=
    • IN, NOT IN
    • Contains, HasPrefix, HasSuffix
    • ContainsFold, EqualFold (SQL specific)
  • 可选 字段:
    • IsNil, NotNil

边条件

  • HasEdge. 满足边的实体,例如:Pet 类型定义了 owner 边,要查询满足该边(有主人的宠物)的实体:

    1. client.Pet.
    2. Query().
    3. Where(user.HasOwner()).
    4. All(ctx)
  • HasEdgeWith. 满足边及其条件的实体列表,例如,在满足上一个例子的情况下,还要求主人的姓名为 a8m

    1. client.Pet.
    2. Query().
    3. Where(user.HasOwnerWith(user.Name("a8m"))).
    4. All(ctx)

非 (NOT)

  1. client.Pet.
  2. Query().
  3. Where(user.Not(user.NameHasPrefix("Ari"))).
  4. All(ctx)

或 (OR)

  1. client.Pet.
  2. Query().
  3. Where(
  4. user.Or(
  5. user.HasOwner(),
  6. user.Not(user.HasFriends()),
  7. )
  8. ).
  9. All(ctx)

与 (AND)

  1. client.Pet.
  2. Query().
  3. Where(
  4. user.And(
  5. user.HasOwner(),
  6. user.Not(user.HasFriends()),
  7. )
  8. ).
  9. All(ctx)

自定义条件

自定义条件,可以让你自行书写满足所使用方言的查询条件。

  1. pets := client.Pet.
  2. Query().
  3. Where(predicate.Pet(func(s *sql.Selector) {
  4. s.Where(sql.InInts(pet.OwnerColumn, 1, 2, 3))
  5. })).
  6. AllX(ctx)