背景
項目追加等を行ったケースでプログラムがスパゲティ化しちゃうのでSQLで頑張ろうぜなシーンがあったので調べた
※使った事はないで仕様解析はしていませんがリビジョン設定がある場合、これで要件は満たせないと思われます。
ユーザー情報
usersに持っている項目テーブルの一覧が出てくる
show tables like 'user__field%';
代表的なフィールドを例にSELECT
※他にもあるけどそこは自分で解析してください
SELECT
u.uid -- drupal上のユーザーID
,ufd.name -- ユーザーのログインアカウント名
,ufd.mail -- ユーザーのメールアドレス
,ufd.init -- ユーザー登録時のメールアドレスらしい
,ufd.status -- 0:block,1:active
/*
,other.field_xxxx_target_id -- 他のEntityに紐づけている
,other.field_xxxx_value -- 単独で値を持っている
*/
FROM
users u
INNER JOIN
users_field_data ufd
ON u.uid = ufd.uid
AND u.langcode = ufd.langcode
[/*
LEFT JOIN
user__field_xxxxx as other
ON other.entity_id = u.uid
AND u.langcode = other.langcode
AND other.bundle = 'user'
*/
LIMIT 0,10;
node
nodeに持っている項目テーブルの一覧が出てくる
show tables like 'node__field%';
SELECT
n.nid -- node id
,ndf.created -- 作成日時の整数値 日付で見たい場合はcastして
,ndf.changed -- 更新日時の整数値 日付で見たい場合はcastして
/*
,other.field_xxxx_target_id -- 他のEntityに紐づけている
,other.field_xxxx_value -- 単独で値を持っている
*/
FROM
node n
INNER JOIN
node_field_data ndf
on n.nid = ndf.nid
AND n.type = ndf.type
AND n.langcode = ndf.langcode
/*
LEFT JOIN
node__field_xxxx other
ON n.nid = other.entity_id
AND n.type = other.bundle
AND n.langcode = other.langcode
*/
WHERE
n.type = 'xxxxx' -- 検索したいnode type
LIMIT 0,10;
;