現在
PHP:7.1.1
fuelphp:1.8
で開発中
後付で自動化とか諸々を目論んでいる中、DBからmigrationファイルを作りたくなったので当然できるよなという考えの元に色々調べたらできるらしいことがわかった。
下記で本来ならできるはず
$ php oil r fromdb:model (テーブル名)
え、別にmodelいらないとおもったが、model部分をmigrationにすればmigrationファイルだけ生成できる。
$ php oil r fromdb:migration (テーブル名)
はずだったが、うわさではPHP7.1からの仕様変更により文字列と数字を合算したりするとエラーが出るらしい。
わ〜い、当たり前。
$ php oil r fromdb:migration (テーブル名)
Uncaught exception Fuel\Core\PhpErrorException: A non-numeric value encountered
Callstack:
#0 /fuel/core/bootstrap.php(103): Fuel\Core\Errorhandler::error_handler(2, 'A non-numeric v...', '/Applications/M...', 1790)
#1 /fuel/packages/oil/classes/generate.php(1790): {closure}(2, 'A non-numeric v...', '/Applications/M...', 1790, Array)
#2 /fuel/packages/oil/classes/generate.php(1177): Oil\Generate::_find_migration_number()
#3 /fuel/packages/oil/classes/generate.php(747): Oil\Generate::migration(Array, false)
#4 [internal function]: Oil\Generate::model(Array)
#5 /fuel/packages/oil/tasks/fromdb.php(155): call_user_func('Oil\\Generate::m...', Array)
#6 /fuel/core/base56.php(37): Fuel\Tasks\Fromdb::model(Array)
#7 /fuel/packages/oil/classes/refine.php(108): call_fuel_func_array(Array, Array)
#8 [internal function]: Oil\Refine::run('\\Fuel\\Tasks\\Fro...', Array)
#9 /fuel/packages/oil/classes/command.php(126): call_user_func('Oil\\Refine::run', 'fromdb:model', Array)
#10 /oil(68): Oil\Command::init(Array)
#11 {main}
というわけでfuelphpの中身を軽く修正。
/fuel/packages/oil/classes/generate.php(1790)
こいつが怪しいので該当箇所を見る。
return str_pad($last + 1, 3, '0', STR_PAD_LEFT);
上記を
return str_pad((int)$last + 1, 3, '0', STR_PAD_LEFT);
こうして動かしてみた。
$ oil r fromdb:migration (テーブル名)
Creating migration: /fuelphp/fuel/app/migrations/001_table_name.php
できた〜。
応急処置が過ぎるので正式な対応かどうかわからない。
なんか問題あれば教えてください。