今天要介紹一個有趣的 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