「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
カスタムフィールドの型を変える(その4)
昨日の続きで、変更前後でデータの保存先の列が異なる場合の、カスタムフィールドの型の変え方を解説します。
今日は、ウェブサイト/ブログ/ユーザーのカスタムフィールドの場合を取り上げます。
1.注意事項
昨日と同様に、この記事で取り上げる方法では、データベースを直接に操作します。
操作を間違うと、Movable Typeのデータ(特にカスタムフィールドのデータ)が壊れることもあり得ます。
データベースを操作する前に、データを必ずバックアップしておいてください。
また、バックアップしたデータを正しく復元できることも確認しておいてください。
操作ミスでデータが壊れたとしても、当方は責任を負いません。
2.SQLの実行
基本的な手順は、昨日の記事と同じです。
ただし、ウェブサイト/ブログ/ユーザーのカスタムフィールドはシステムレベルでしか作成できないので、データを移動するSQLから、ブログ/ウェブサイトを指定する条件を削除します。
まず、先日の記事に書いた手順で、mt_fieldテーブルを書き換えておきます。
この際には、SQLの中でブログのIDを指定する箇所を「WHERE field_blog_id = 0」にして、システムのカスタムフィールドであるという条件を指定します。
次に、以下の2つのSQLを順に実行します。
1つ目
UPDATE mt_○○○_meta, mt_○○○ SET ○○○_meta_□□□ = ○○○_meta_△△△ WHERE ○○○_id = ○○○_meta_○○○_id AND ○○○_meta_type = 'field.◎◎◎'
2つ目
UPDATE mt_○○○_meta, mt_○○○ SET ○○○_meta_△△△ = NULL WHERE ○○○_id = ○○○_meta_○○○_id AND ○○○_meta_type = 'field.◎◎◎'
SQL内の記号の意味は、昨日の記事と同じです。
また、オブジェクトの型名には、以下の値を指定します。
オブジェクトの種類 | 型名 |
---|---|
ブログまたはウェブサイト | blog |
ユーザー | author |
3.事例
例えば、以下の状況だとします。
- ユーザーにテキスト型のカスタムフィールドがある
- ベースネームはauthor_msg
- テキスト型からテキスト(複数行)型に変えたい
この場合、まず以下のSQLで、mt_fieldテーブルを書き換えます。
UPDATE mt_field SET field_type = 'textarea' WHERE field_blog_id = 0 AND field_basename = 'author_msg'
次に、データを移動します。
テキスト型/テキスト(複数行)型では、データはそれぞれvchar_idx/vclob列に保存されています。
そこで、以下の2つのSQLを実行します。
1つ目
UPDATE mt_author_meta, mt_author SET author_meta_vclob = author_meta_vchar_idx WHERE author_id = author_meta_author_id AND author_meta_type = 'field.author_msg'
2つ目
UPDATE mt_author_meta, mt_author SET author_meta_vchar_idx = NULL WHERE author_id = author_meta_author_id AND author_meta_type = 'field.author_msg'