こんにちは。株式会社dottの山上です。
Strapi Advent Calenderも佳境に入ってきた21日目の本日は、strapiのデータ型がDB上でどう表現されるのか調べてみたので、書いて行きたいと思います。
Strapi Advent Calenderのその他の記事はこちら
strapiのデータ型
それぞれのDB上の型定義と比較しながら見ていきたいと思います。
(ただし、今回はRelation, Component, DynamicZoneについては自分の理解度も足りてないので一旦割愛します。)
Text
text型はshort textとlong textが選択できます。
RichText
Password
Number
number型はinteger, big integer, decimal, floatから選択可能です。
Enum
enum型はenumの要素を定義できるボックスが用意されていました。
Date
date型はdate, datetime, timeから選択可能です。
Media
Boolean
JSON
UID
uid型はattached typeがnone, shortText, longTextと選択可能でした。
とりあえず全部作ってみた
ローカルのDBはSQLiteで作成されるので、Postgresqlなどで動かすとまた結果が変わるかもしれませんが、とりあえず上記の項目毎に1つずつフィールドを作ってローカルのDBを確認してみました。
(relational_modelは前回の記事作成時にそのままになってるrelationの項目です。)
結果は以下の通り。
- varchar(255)(=文字数制限ありの文字列)
- text型のshorttext
- password
- enum
- UID型のattached field=none
- UID型のattached field=shorttext
- UID型のattached field=longtext
- text(=文字数制限なしの文字列)
- text型のlongtext
- richtext
- json
- integer
- number型のinteger
- bigint
- number型のbig integer
- float
- number型のdecimal
- number型のfloat
- date
- date型のdate
- datetime
- date型のdatetime
- time
- date型のtime
- boolean
- boolean
データ型については以下も参照してみてください。
・・・自分でも読んでみたけど、SQLiteのデータ型がすごい種類少ない?
SQLite
Postgresql
DB上の型は同じだけどstrapi上で定義が別れているものの違い
strapi上で定義が別れているものは、管理画面側のUIで違いが出てるっぽいです。
emailの形にしないとバリデーションでエラーにしてくれます。
longtext, richtext
longtextが単純なテキストボックスなのに対し、richtextはmarkdown形式で色々と装飾ができるようになっています。
password
目のアイコンをクリックでパスワードの表示非表示を切り替えられるようになっています。
integer
decimal, float
enum
datetime, date, time
media
見た目一緒なのですが、クリックした後の挙動が違います。
multiの場合は画像の選択時に複数同時に選択できるようになっています。
boolean
JSON
ちゃんとJSONフォーマットで入れないとエラーにしてくれます。
UID
UIDを自動生成してくれる様子・・・?仕組みがよくわかってないですorz
まとめ
- strapiにはデフォルトで様々なパターンに対応できるデータ型が用意されている
- strapiでの定義が違っても、DB上でのデータ型は同じ、と言う型がいくつかあった
- strapiでの定義が違う型は、管理画面のUIがそのデータ型に合わせて表示される
- 上記の違いを理解して、上手いこと使い分けていきましょう
今回は以上になります。