FuelPHP 的 oil 提供快速建立 model 和 migration 的方法,例如要建立一資料表存放使用者帳號:
oil g model users id:int username:varvhar[100] email:varchar[200]
oil 則會幫你產生 table 的 migration:
<?php
namespace FuelMigrations;
class Create_users
{
public function up()
{
DBUtil::create_table('users', array(
'id' => array('constraint' => 11, 'type' => 'int'),
'username' => array('constraint' => 100, 'type' => 'varvhar'),
'email' => array('constraint' => 200, 'type' => 'varchar'),
'created_at' => array('constraint' => 11, 'type' => 'int'),
'updated_at' => array('constraint' => 11, 'type' => 'int'),
), array('id'));
}
public function down()
{
DBUtil::drop_table('users');
}
}
其中 id 自動被當作 primary key,沒有設定 auto_increment。
若要建立一個資料表,需要有欄位「id」當作 primary key 且設定 auto_increment 屬性,可以將「id」從 oil 參數中去掉,當 oil 偵測到資料表沒有欄位名稱包含 id 且沒辦法設定 primary key 時,便會自動新增一個「id」的欄位:
public function up()
{
DBUtil::create_table('users', array(
'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
'username' => array('constraint' => 100, 'type' => 'varchar'),
'email' => array('constraint' => 200, 'type' => 'varchar'),
'created_at' => array('constraint' => 11, 'type' => 'int'),
'updated_at' => array('constraint' => 11, 'type' => 'int'),
), array('id'));
}
oil 的參數中很清楚標示欄位的設定為 fieldname:type,沒辦法加入其他欄位屬性。假設要為欄位加上其他屬性,像是 null、index 等,則必須在 oil 產生 migration 以後,手動在 migration 中新增自己需要的屬性。
ps. oil 還會偵測資料表名稱,migration 會將資料表名稱改成複數。