[CakePHP2] SQL文を貼り付けると、CakePHPのコードを生成するサービス
infinitas-cms.org というCakePHP製CMSを開発している @dogmatic69 さんが、すごいものを開発してました。
なんと、SQL文をペーストすると、CakePHPのコードを生成するものです。
http://dogmatic69.com/sql-to-cakephp-find-converter
コードは3パターン出力されます。オプションを選ぶと、ClassRegistry::init経由での呼び出しパターンとか切り替え可能です。
- findのオプションで指定する方法 find('all', $params)みたいなパターン
- Modelのコードを出力。カスタムfindメソッドを生成するパターン
- Paginationコンポーネントで指定するパターン
バーチャルフィールドなども考慮して出力するという素晴らしい仕様!
たとえば、下記のようなSQLを貼り付けると
select id, SUM(your_field) from foos where id = 1 and bar = 'fuga' order by buz limit 1,1;
モデルファイルのコードを生成して表示してくれます。
<?php class Foo extends AppModel { /** * Virtual fields * * @var array */ public $virtualFields = array( 'sum_your_field' => 'SUM(your_field)', ); /** * Custom find methods * * @var array */ public $findMethods = array( 'special' => true ); /** * Special find * * @param string $state The state of the find (before or after) * @param array $query the query conditions * @param array $results the results * * @return array */ protected function _findSpecial($state, $query, $results = array()) { if ($state == 'before') { $query['fields'] = array_merge((array)$query['fields'], array( 'Foo.id', 'Foo.sum_your_field', )); $query['conditions'] = array_merge((array)$query['conditions'], array( 'id' => '1', 'bar' => 'fuga', )); $query['order'] = array_merge((array)$query['order'], array( 'buz' => 'asc', )); $query['limit'] = 1; $query['offset'] = '1'; return $query; } return current($results); } }
まだ不完全なところもあるかもしれませんが、それなりに使える便利なサービスになりそうです。
# 本末転倒のような気がしないでもないですが。。。。