マイグレーションをつくりだす

手書きすんのめんどくさい

DBにデータを出し入れするロジックを手書きするのがめんどくさくなってきたのでオレオレフレームワークに合わせたmodelとviewをちゃちゃっと作れる機能をこさえることにした。

通常であればphpコードからdbにクエリを投げてテーブルやらデータを構成するがphpmyadminでささっとdb構成を作ってphpからそれを見てmvcのそれぞれを作る方が効率的かと思われる。

とりあえずDB構成を掘り出す

MySQLのクエリだと下記で出る。

SELECT * FROM information_schema.columns where TABLE_SCHEMA = 'dbname'

で、サンプルが下記。いらなさそうなカラムは落としている。

TABLE_SCHEMATABLE_NAMECOLUMN_NAMEORDINAL_POSITIONIS_NULLABLEDATA_TYPECHARACTER_MAXIMUM_LENGTHNUMERIC_PRECISIONNUMERIC_SCALECOLUMN_TYPE
DBの名前テーブルの名前カラムの名前テーブル内でのカラムの並び順nullを許容するかデータ型文字列型の場合の最大字数数値型の最大桁数数値型の小数点以下桁数テーブル作るときのあれ
testtesta1NOintNULL100int(2)
testtestb2YESintNULL100int(2)
testtestc3NOdecimalNULL50decimal(5,0)
testtestd4NOfloatNULL12NULLfloat
testteste5NOdoubleNULL55double(5,5)
testtestf6NOdatetimeNULLNULLNULLdatetime
testtestg7NOintNULL100int(5)
testtesth8NOvarchar16NULLNULLvarchar(16)
testtesti9YESvarchar16NULLNULLvarchar(16)
testtestj10NOvarchar16NULLNULLvarchar(16)
testtestk11NOintNULL100int(11)

サンプルとしては最悪のdecimal(5, 0)とint(11)を含んでいるのは愛嬌ということで。

NUMERIC_PRECISIONは数値型のカラムに対しての字数の最大桁数でNUMERIC_SCALEは小数点以下の桁数である。int型の最大字数が10桁となっているのとint(2)の関連性はzerofillをセットした際に初めて機能するもので決して2桁以上の整数を入れようとしたときにエラーを吐くわけではない。やってみると3桁以上でも普通に受け付ける。

floatとdoubleは見なかったことにする。