iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Modern Web

一些讓你看來很強的 ORM - prisma系列 第 27

Day27. 一些讓你看來很強的 ORM - prisma (Scalar Lists)

  • 分享至 

  • xImage
  •  

今天要介紹一個有趣的 scalar type 就是 scalar lists 顧名思義它就是基於 scalararray type ,在 prisma 中我們會用 [] 當作他是一個 scalar lists 如以下的 User schema

model User {
  id   Int      @id @default(autoincrement())
  name String
  pets String[]
}

那這邊的 pets 就可以塞 string array 的資料如下

['Fido', 'Snoopy', 'Brian']

Set Scalar List

如果要塞值得話可以直接加上 String Arrayvalue 就好

const createdUser = await prisma.user.create({
    data: {
      email: faker.internet.email(),
      age: faker.helpers.rangeToNumber({ min: 0, max: 99 }),
      name: faker.person.fullName(),
      pets: ['Fido', 'Snoopy', 'Brian']
    }
  })

等同於底下寫法,這邊的 set 可以省略

const result = await prisma.user.create({
    data: {
      email: faker.internet.email(),
      age: faker.helpers.rangeToNumber({ min: 0, max: 99 }),
      name: faker.person.fullName(),
       pets: {
        set: ['Cooper', 'Charlie', 'Sophie']
      }
    }
  })

Update Scalar List

那如果要更新 pets 的資料,我們就可以用 set 這個關鍵字,直接複寫新的 pets list

 const result = await prisma.user.update({
    where: {
      id: 1301
    },
    data: {
      pets: {
        set: ['Cooper', 'Charlie', 'Sophie']
      }
    }
  })

也或者你要清空 userpets list

 const result = await prisma.user.update({
    where: {
      id: 1301
    },
    data: {
      pets: {
        set: []
      }
    }
  })

另外補充一個有趣的,如果你今天是用 mongoDB 的話可以用 unsetunset 會是幫你清空 array 的內容,而不是將欄位設成 null

const setPets = await prisma.user.update({
  where: {
    id: 1301,
  },
  data: {
    pets: {
      unset: true,
    },
  },
})

這邊你也可以用 push 的方式新增內容到 pets

const result = await prisma.user.update({
    where: {
      id: 1301
    },
    data: {
      pets: {
        push: ['Rudy']
      }
    }
  })

Filter Scalar List

filter Scalar List 的資料有五種方式:

  • has:是否有資料包含在 list
  • hasEvery : list 中的資料都包含在 hasEvery 的條件中
  • hasSome : list 中的資料只要其中一個有在 hasSome 的條件中就返回結果
  • equals : list 資料完全符合 equals 的條件
  • isEmpty:list 資料是 empty array ,這邊要注意如果 listnull 是不會返回結果的
  • isSet:list 的資料是不是 null

Has

這邊返回 userpets 其中一個叫做 Rudy 的人

const user = await prisma.user.findMany({
    where: {
      pets: {
        has: 'Rudy'
      }
    }
  })

HasEvery

這邊返回 userpets list 同時包含 Rudytypescript 的人

 const user = await prisma.user.findMany({
    where: {
      pets: {
        hasEvery: ['Rudy', 'typescript']
      }
    }
  })
 

HasSome

這邊返回 userpets list 其中包含 Rudytypescript 的人

 const user = await prisma.user.findMany({
    where: {
      pets: {
        hasSome: ['Rudy', 'typescript']
      }
    }
  })

Equals

這邊返回 userpets list 其中只有 Rudytypescript 的人

 const user = await prisma.user.findMany({
    where: {
      pets: {
        equals: ['Rudy', 'typescript']
      }
    }
  })

IsEmpty

這邊返回沒有 pets list (empty Array) 的人

 const user = await prisma.user.findMany({
    where: {
      pets: {
        isEmpty: true
      }
    }
  })

IsSet ( Only In Mongodb)

這邊比較特別的是,isSet 代表有沒設值到 pets 的欄位,不管他是不是 null

 const user = await prisma.user.findMany({
    where: {
      pets: {
        isSet: true
      }
    }
  })

大家如果有問題可以來小弟的群組討論~

✅ 前端社群 :
https://lihi3.cc/kBe0Y


上一篇
Day26. 一些讓你看來很強的 ORM - prisma (TypeSQL)下
下一篇
Day28. 一些讓你看來很強的 ORM - prisma (Postgresql)
系列文
一些讓你看來很強的 ORM - prisma30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言