マイグレーションをつくりだす
手書きすんのめんどくさい
DBにデータを出し入れするロジックを手書きするのがめんどくさくなってきたのでオレオレフレームワークに合わせたmodelとviewをちゃちゃっと作れる機能をこさえることにした。
通常であればphpコードからdbにクエリを投げてテーブルやらデータを構成するがphpmyadminでささっとdb構成を作ってphpからそれを見てmvcのそれぞれを作る方が効率的かと思われる。
とりあえずDB構成を掘り出す
MySQLのクエリだと下記で出る。
SELECT * FROM information_schema.columns where TABLE_SCHEMA = 'dbname'
で、サンプルが下記。いらなさそうなカラムは落としている。
TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | COLUMN_TYPE |
---|---|---|---|---|---|---|---|---|---|
DBの名前 | テーブルの名前 | カラムの名前 | テーブル内でのカラムの並び順 | nullを許容するか | データ型 | 文字列型の場合の最大字数 | 数値型の最大桁数 | 数値型の小数点以下桁数 | テーブル作るときのあれ |
test | test | a | 1 | NO | int | NULL | 10 | 0 | int(2) |
test | test | b | 2 | YES | int | NULL | 10 | 0 | int(2) |
test | test | c | 3 | NO | decimal | NULL | 5 | 0 | decimal(5,0) |
test | test | d | 4 | NO | float | NULL | 12 | NULL | float |
test | test | e | 5 | NO | double | NULL | 5 | 5 | double(5,5) |
test | test | f | 6 | NO | datetime | NULL | NULL | NULL | datetime |
test | test | g | 7 | NO | int | NULL | 10 | 0 | int(5) |
test | test | h | 8 | NO | varchar | 16 | NULL | NULL | varchar(16) |
test | test | i | 9 | YES | varchar | 16 | NULL | NULL | varchar(16) |
test | test | j | 10 | NO | varchar | 16 | NULL | NULL | varchar(16) |
test | test | k | 11 | NO | int | NULL | 10 | 0 | int(11) |
サンプルとしては最悪のdecimal(5, 0)とint(11)を含んでいるのは愛嬌ということで。
NUMERIC_PRECISIONは数値型のカラムに対しての字数の最大桁数でNUMERIC_SCALEは小数点以下の桁数である。int型の最大字数が10桁となっているのとint(2)の関連性はzerofillをセットした際に初めて機能するもので決して2桁以上の整数を入れようとしたときにエラーを吐くわけではない。やってみると3桁以上でも普通に受け付ける。
floatとdoubleは見なかったことにする。