php:fuelphp:oil_generate_model

文書の過去の版を表示しています。


oil コマンドによる model と migration 定義の生成

oil コマンドは /fuelapp 直下に存在する。

$ cd fuelapp
$ oil generate model tablename colume1:varchar[10] colume2:int column3:datetime column4:text

または cli 版の php を明示して実行

$ php oil generate model ...

generate は g のように短縮指定で実行

$ oil g model ...

oil の g model に table に関する情報を指定する。

$ oil g model [テーブル名] [列1:列1の型] [列2:列2の型] [列3:列3の型] ...


model の generate を実行すると model コードと migration 定義が生成される。

$ oil g model tablename column1:varchar[10] column2:int column3:datetime column4:text
	Creating model: /Users/tomoyan/fuelapp/fuel/app/classes/model/tablename.php
	Creating migration: /Users/tomoyan/fuelapp/fuel/app/migrations/001_create_tablenames.php


fuelapp/fuel/app/classes/model/tablename.php <sxh php collapse:true> <?php

class Model_Tablename extends \Orm\Model {

  protected static $_properties = array(
      'id',
      'column1',
      'column2',
      'column3',
      'column4',
      'created_at',
      'updated_at'
  );
  protected static $_observers = array(
      'Orm\Observer_CreatedAt' => array(
          'events' => array('before_insert'),
          'mysql_timestamp' => false,
      ),
      'Orm\Observer_UpdatedAt' => array(
          'events' => array('before_save'),
          'mysql_timestamp' => false,
      ),
  );

} </sxh> fuelapp/fuel/app/migrations/001_create_tablenames.php <sxh php collapse:true> <?php

namespace Fuel\Migrations;

class Create_tablenames {

  public function up()
  {
      \DBUtil::create_table('tablenames', array(
          'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
          'column1' => array('constraint' => 10, 'type' => 'varchar'),
          'column2' => array('constraint' => 11, 'type' => 'int'),
          'column3' => array('type' => 'datetime'),
          'column4' => array('type' => 'text'),
          'created_at' => array('constraint' => 11, 'type' => 'int'),
          'updated_at' => array('constraint' => 11, 'type' => 'int'),
      ), array('id'));
  }
  public function down()
  {
      \DBUtil::drop_table('tablenames');
  }

} </sxh>

$ oil r migrate

または

$ oil refine migrate
Performed migrations for app:default:
001_create_tablenames.php

処理済みの migration は以下のように記録される。
fuelapp/fuel/app/config/development/migrations.php <sxh php collapse:true> <?php return array(

'version' => 
array(
	'app' => 
	array(
		'default' => 
		array(
			0 => '001_create_tablenames',
		),
	),
	'module' => 
	array(
	),
	'package' => 
	array(
	),
),
'folder' => 'migrations/',
'table' => 'migration',

); </sxh> mysql の migration テーブルにも記録される。

mysql> use fuel_db;
Database changed
mysql> SELECT * FROM migration;
+------+---------+--------------------------+
| type | name    | migration                |
+------+---------+--------------------------+
| app  | default | 001_create_tablenames    |
+------+---------+--------------------------+
1 row in set (0.00 sec)

create_at、update_at を timestamp 型にするには –mysql-timestamp を指定する。

$ oil g model tablename column1:varchar[10] column2:int column3:datetime column4:text --mysql-timestamp

fuelapp/fuel/app/classes/model/tablename.php <sxh php collapse:true> <?php

class Model_Tablename extends \Orm\Model {

  protected static $_properties = array(
      'id',
      'column1',
      'column2',
      'column3',
      'column4',
      'created_at',
      'updated_at'
  );
  protected static $_observers = array(
      'Orm\Observer_CreatedAt' => array(
          'events' => array('before_insert'),
          'mysql_timestamp' => true,
      ),
      'Orm\Observer_UpdatedAt' => array(
          'events' => array('before_save'),
          'mysql_timestamp' => true,
      ),
  );

} </sxh> fuelapp/fuel/app/migrations/001_create_tablenames.php <sxh php collapse:true> <?php

namespace Fuel\Migrations;

class Create_tablenames {

  public function up()
  {
      \DBUtil::create_table('tablenames', array(
          'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
          'column1' => array('constraint' => 10, 'type' => 'varchar'),
          'column2' => array('constraint' => 11, 'type' => 'int'),
          'column3' => array('type' => 'datetime'),
          'column4' => array('type' => 'text'),
          'created_at' => array('type' => 'timestamp'),
          'updated_at' => array('type' => 'timestamp'),
      ), array('id'));
  }
  public function down()
  {
      \DBUtil::drop_table('tablenames');
  }

}</sxh>

既に生成済みのテーブルを強制的に上書き生成するには -f または –force を指定する。

$ oil g model tablename colume1:varchar[10] colume2:int column3:datetime column4:text -f

例えば t_table_name のようなテーブル名を使うと、'_' を使った分だけ model の階層が深くなってします。

$ oil generate model t_table_name column1:varchar[10] column2:int column3:datetime column4:text --mysql-timestamp
	Creating model: /Users/tomoyan/fuelapp/fuel/app/classes/model/t/table/name.php
	Creating migration: /Users/tomoyan/fuelapp/fuel/app/migrations/002_create_t_table_names.php

このような階層になってしまうとメンテナンス性もあまりよろしくない。

[fuelapp/fuel/app/classes/model/]
    +- [t]
         +- [table]
             +- name.php

このようにしたくても、そのままでは php ファイルをオートロードできない。

[fuelapp/fuel/app/classes/model/]
    +- t_table_name.php

オートロードできるようにするには、以下のファイルを記述する。
fuelapp/app/bootstrap.php <sxh php collapse:true highlight:[14]> <?php

Load in the Autoloader require COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php'; class_alias('Fuel\\Core\\Autoloader', 'Autoloader'); Bootstrap the framework DO NOT edit this require COREPATH.'bootstrap.php';

Autoloader::add_classes(array(

  // Add classes you want to override here
  // Example: 'View' => APPPATH.'classes/view.php',
  'Model_T_Table_Name' => APPPATH.'classes/model/t_table_name.php',

));

Register the autoloader Autoloader::register(); /** * Your environment. Can be set to any of the following: * * Fuel::DEVELOPMENT * Fuel::TEST * Fuel::STAGE * Fuel::PRODUCTION */ Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT); Initialize the framework with the config file. Fuel::init('config.php'); </sxh>

  • php/fuelphp/oil_generate_model.1353745128.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)