〜FuelPHP〜 oil generate migrationでMySQLのテーブルを作る

ブログなどのコンタクトフォームから送信されたデータを保存する時はデータベースが必要になってきます。今回はFuelPHPでコンタクトフォームを作るときを想定してMySQLでデータベースとテーブルを作りたいと思います。

まずMySQLにログイン

stnet@m1:$ mysql -u root -p

データベースを作ります。はじめ oil generate migration でデータベースも作ってくれるのかと思っていましたが手動で作る必要があります。ここでは例としてデータベース名をmysql_devとし、デフォルトの文字コードUTF-8にするときを想定します。

mysql > create database mysql_dev default character set utf8;

テスト環境のデータベースを作ってもいいでしょう。ここではデータベース名をmysql_testとし、同様にデフォルトの文字コードUTF-8にするときを想定します。

mysql > create database aizu_uni_2016_test default character set utf8;

ユーザーにデータベースを扱う権限を追加

mysql > grant all privileges on mysql_dev.* to username@localhost identified by 'passwd';

同様にテスト環境用にも。identified 以降は省略してもk構いません

mysql > grant all privileges on mysql_test.* to username@localhost;
mysql > \q

マイグレーションによるテーブルの作成にはfuel/core/config内のmigrations.phpを以下のフォルダにコピーしてあげる必要があります。

stnet@m1:$ cp fuel/core/config/migrations.php fuel/app/config/development/
stnet@m1:$ cp fuel/core/config/migrations.php fuel/app/config/test/

次にfuel/app/config/db.phpを編集

<?php
/**
 * Use this file to override global defaults.
 *
 * See the individual environment DB configs for specific config information.
 */

return array(

	'default' => array(
	    'type'         => 'mysqli',
	    'connection'   => array(
	    'persistent'   => false,
	    ),
	    'charset'	   => 'utf8',
	    'collation'    => false,
	    'enable_cache' => true,
	    'profiling'    => false,
	    'readonly' 	   => false,
      ),
);

developmentディレクトリにコピーしたdb.phpを編集

<?php
/**
 * The development database settings. These get merged with the global settings.
 */

return array(
	'default' => array(
		'connection'  => array(
			//'dsn'        => 'mysql:host=localhost;dbname=mysql_dev',
			'hostname'   => 'localhost',
			'port'       => '3306',
			'database'   =>	'databasename',
			'username'   => 'username',
			'password'   => 'password',
		),
	),
);

return array(
        'profiling' => true,
);

testディレクトリにコピーしたdb.phpを編集

<?php
/**
 * The test database settings. These get merged with the global settings.
 *
 * This environment is primarily used by unit tests, to run on a controlled environment.
 */

return array(
	'default' => array(
		'connection'  => array(
			//'dsn'        => 'mysql:host=localhost;dbname=mysql_test',
			//'username'   => 'fuel_app',
			//'password'   => 'super_secret_password',
			'hostname'   => 'localhost',
			'port'       => '3306',
			'database'   =>	'databasename',
			'username'   => 'username',
			'password'   => 'password',
		),
	),
);

データベースを定義

stnet@m1:$ oil generate migration create_form id:int username:string[50] email:string[100] message_text:string[400] imgpath:string[512] created_at:int uploaded_at:int  

最後に、定義したデータベースを実際に作成します。

stnet@m1:$ oil refine migrate

refineが成功したら何もエラーがでないはずです。