今天要介紹一個有趣的 scalar type 就是 scalar lists 顧名思義它就是基於 scalar 的 array type ,在 prisma 中我們會用 [] 當作他是一個 scalar lists 如以下的 User schema
model User {
id Int @id @default(autoincrement())
name String
pets String[]
}
那這邊的 pets 就可以塞 string array 的資料如下
['Fido', 'Snoopy', 'Brian']
如果要塞值得話可以直接加上 String Array 的 value 就好
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']
}
}
})
那如果要更新 pets 的資料,我們就可以用 set 這個關鍵字,直接複寫新的 pets list
const result = await prisma.user.update({
where: {
id: 1301
},
data: {
pets: {
set: ['Cooper', 'Charlie', 'Sophie']
}
}
})
也或者你要清空 user 的 pets list
const result = await prisma.user.update({
where: {
id: 1301
},
data: {
pets: {
set: []
}
}
})
另外補充一個有趣的,如果你今天是用 mongoDB 的話可以用 unset ,unset 會是幫你清空 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 的資料有五種方式:
list
list 中的資料都包含在 hasEvery 的條件中list 中的資料只要其中一個有在 hasSome 的條件中就返回結果list 資料完全符合 equals 的條件list 資料是 empty array ,這邊要注意如果 list 是 null 是不會返回結果的list 的資料是不是 null
這邊返回 user 的 pets 其中一個叫做 Rudy 的人
const user = await prisma.user.findMany({
where: {
pets: {
has: 'Rudy'
}
}
})
這邊返回 user 的 pets list 同時包含 Rudy 跟 typescript 的人
const user = await prisma.user.findMany({
where: {
pets: {
hasEvery: ['Rudy', 'typescript']
}
}
})
這邊返回 user 的 pets list 其中包含 Rudy 或 typescript 的人
const user = await prisma.user.findMany({
where: {
pets: {
hasSome: ['Rudy', 'typescript']
}
}
})
這邊返回 user 的 pets list 其中只有 Rudy 跟 typescript 的人
const user = await prisma.user.findMany({
where: {
pets: {
equals: ['Rudy', 'typescript']
}
}
})
這邊返回沒有 pets list (empty Array) 的人
const user = await prisma.user.findMany({
where: {
pets: {
isEmpty: true
}
}
})
這邊比較特別的是,isSet 代表有沒設值到 pets 的欄位,不管他是不是 null
const user = await prisma.user.findMany({
where: {
pets: {
isSet: true
}
}
})
✅ 前端社群 :
https://lihi3.cc/kBe0Y