実は、以下のタスクがベースになっています。(ソースにチラッと書いてあります。)
「FuelPHP - 既存DBからのScaffold」
http://www.slideshare.net/mamoruotsuka/fuelphp-tokyo-vol220120923
経緯は最後に書くとして、使い方をざっと見ておきます。
(1)
サンプルのテーブルを作成します。
-- ----------------------------------------------------- -- Table `parents` -- ----------------------------------------------------- DROP TABLE IF EXISTS `parents` ; CREATE TABLE IF NOT EXISTS `parents` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(255) NOT NULL , `age` INT NOT NULL , `created_at` INT NOT NULL , `updated_at` INT NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `children` -- ----------------------------------------------------- DROP TABLE IF EXISTS `children` ; CREATE TABLE IF NOT EXISTS `children` ( `id` INT NOT NULL AUTO_INCREMENT , `parent_id` INT NOT NULL , `name` VARCHAR(255) NOT NULL , `age` INT NOT NULL , `created_at` INT NOT NULL , `updated_at` INT NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB;(2)
FuelPHPのDB設定(db.php)を済ませます。
(3)
単一のテーブルを指定してscaffoldを生成してみます。
$ php oil r fromdb:scaffold parents以下、都合上"-f(--force)"オプションをつけていませんが、作成済みのファイルを上書きする場合に必要です。
詳しくは
$ php oil r fromdb:helpをご覧ください。
(4)
複数のテーブルを指定してscaffoldを生成してみます。カンマ区切りで指定します。
$ php oil r fromdb:scaffold parents,children(5)
全テーブルに対してscaffoldを生成してみます。"--all"オプションを付けます。
DBドライバでPDOは使用出来ません。PDOドライバはテーブル一覧の取得に非対応です。
$ php oil r fromdb:scaffold --all(6)
指定DBに対してscaffoldを生成してみます。DBは"--db=xxx"形式で指定します。
$ php oil r fromdb:scaffold --all --db=default以下、"--all"や"--db"オプション含め、テーブルの指定方法は同様です。尚、前述の"-f(--force)"と"--all"を組み合わせると編集途中のファイルも問答無用で上書きされるので注意して下さい。
(7)
admin用のscaffoldを生成してみます。
$ php oil r fromdb:scaffold parents --admin(8)
model(ORM)を生成してみます。
$ php oil r fromdb:model parents(9)
model(Crud)を生成してみます。
$ php oil r fromdb:model parents --crud
以下、簡単な経緯です。
fromdbの元になったタスクは、結構前に自分用に作成してGitHubに保存して有りました。
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffoldtaskgithub.html
本家にも要望があったようで、kenjiさんが紹介してくれました。
https://github.com/fuel/oil/issues/103
その後、kenjiさんにテーブルプレフィックスやCrudに関する検証にご協力いただき、再度、僕の方から本家にコメントしました。
以後、暫く音沙汰がなかったのですが、本家から"コミットで返信"がありました。
https://github.com/fuel/oil/commit/fcb51348c7d4c401895d4e10119fd795fdc57a94
とても有難い結果になりました :)
大変参考になりました。
ReplyDeleteありがとうございます。
テーブルに外部キーをつけると下記のようなエラーが起きます。
まだ外部キーには対応していないのでしょうか?
ご教授お願い致します!
# php oil r fromdb:scaffold zparents, zchildren
Creating migration: /var/www/zyuku/fuel/app/migrations/001_create_zparents.php
Creating model: /var/www/zyuku/fuel/app/classes/model/zparent.php
Creating controller: /var/www/zyuku/fuel/app/classes/controller/zparents.php
Creating view: /var/www/zyuku/fuel/app/views/zparents/index.php
Creating view: /var/www/zyuku/fuel/app/views/zparents/view.php
Creating view: /var/www/zyuku/fuel/app/views/zparents/create.php
Creating view: /var/www/zyuku/fuel/app/views/zparents/edit.php
Creating view: /var/www/zyuku/fuel/app/views/zparents/_form.php
Creating view: /var/www/zyuku/fuel/app/views/template.php
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
# php oil r fromdb:scaffold zparents, zchildren ... (A)
ReplyDeleteですが、カンマの後ろに半角スペースが有ります。
# php oil r fromdb:scaffold zparents,zchildren ... (B)
で正常に実行出来ませんでしょうか。
私の環境で、PDOドライバを使用して、
(A)で同様のエラーが発生することを確認しました。
(B)ではエラーが発生しませんでした。
ありがとうございます。
ReplyDelete(B)の方法で実行できました。