Drupalとデータストア

hagi に投稿

書籍執筆中にまとめた内容をここでも公開しておく

コンテンツタイプとコンテンツの関係は初心者にはなかなか理解できず苦労する人は多い。コンテンツタイプは、コンテンツに関するメタ情報となる。現実社会の紙を例として考えると、コンテンツタイプはA4とかB5とかの仕様を意味すると考えると良い。コンテンツは紙で、基本ページに相当するのはA4の紙という感じだ。実際に一枚A4の紙に「表題:はじめに、本文:最初に作ったページです」と書いたのがコンテンツに対応する。

画像

もう少し、細かく雛形を作ると、例えばヒサゴの請求書といったフォーマットがあり、締切日付やお客様コード、今回請求金額といった内容が含まれた紙が考えられる。その仕様を電子的に定義したものがコンテンツタイプと考えれば良く、そのコンテンツタイプのコンテンツを作るのが、雛形に実際の取引情報を記入することと同義となる。

Drupalでは、そのコンテンツタイプの定義にしたがって、データベースにテーブルを作成する。

ITパスポート試験合格者相当なら、関係データベースの基礎を理解しているだろう。そういう知識があれば、基本ページは、関係データベース上にタイトルと本文からなるテーブルが作成されると想像されるかも知れない。しかし、予想に反してDrupalではテーブルとして作成される基本単位はフィールドとなる(冒頭画像を参照されたい)。店舗(store)などの新たなコンテンツタイプを作ると、最初から本文(body)フィールドが作成される。この本文フィールドは、コンテンツタイプに関わらず同じnode__bodyというテーブルに記録されるのだ。さらに、変更履歴を管理できるようにnode_revision__bodyというテーブルも作られる。これにより、過去のデータを復活させられるようになる。

同じように、nodeとnode_revisionというテーブルが作られ、type列にコンテンツタイプのマシン名が収められる。また、言語コード(langcode)も作成され、同じnode番号でも複数の言語の情報を収めることができるようになっている。言語ごとに作成タイミングや更新タイミングは異なってくることから、コンテンツのタイトルなどの基本情報はnode_field_dataやnode_field_revisionに記録するようになっている。過去からの経緯で列名やデータ型にばらつきがあるなど残念に思うことはあるが、よくできていると思う。

 

Config entityはデータ保存に関わるメタ情報だけでなく表示に関わる情報なども含まれている。例えば、日付フィールドを2023-05-07といったISOの日付表示にするのか、5/7(日)と表示するのかは、データベース上の数値とは無関係で、こういったマッピングの定義もConfig Entityで記述する。

タグ
feedback
こちらに記入いただいた内容は執筆者のみに送られます。内容によっては、執筆者からメールにて連絡させていただきます。