マイグレーション機能とは【CakePHP】データベースを簡単に作成する方法ご紹介
カテゴリ:インターン生ブログ
こんにちは!伊神です!
この記事では、PHPフレームワーク「Cakephp」でマイグレーション機能を使用し簡単にデータベースを作成する方法をご紹介します!
また、弊社ではWebプロモーション成功事例集をまとめた限定資料を無料で配布しています。
Webマーケティングに興味がある方は、下記ページより目を通してみてください。
マイグレーション機能は自動でデータベースを作成したりサンプルデータを挿入できるのでとても便利です。
開発環境
・PHP :7.3.1
・CakePHP:4.0.8
・MySQL:5.7.25
・Apache:2.2.34
マイグレーションとは
マイグレーションはテーブル定義を管理する仕組みのことです。
CakePHPでマイグレーション機能を使用したい場合は、まずマイグレーションファイルというphpのファイルを作成し、そこにアプリケーションで利用したいテーブルの定義を記述します。
マイグレーションファイルはデータベースの設計書のようなもので、Artisan migrateコマンドを実行することによって自動でデータベースを構成することができます。
CakePHPのマイグレーション機能にはシーディングというテスト用のサンプルデータの自動生成できる機能などがありとても便利です。
CakePHP公式マイグレーション:https://book.cakephp.org/3/ja/phinx/migrations.html
またwebで集客する方法を別の記事にまとめております。
詳しく解説しているので、web集客について深く知りたい方は、ぜひこちらもご覧ください。
1.マイグレーションファイルの生成
idとnameカラムでsamplesという名前のテーブルを作成する為のマイグレーションファイルを生成します。
controllerやmodelの生成時にも使用するbakeコマンドを使用します。
idカラムはデフォルトでテーブルの作成時にauto_incrimentのprimary_keyとして自動付与されるのでnameのstringだけ定義します。
1 2 3 4 5 6 7 8 9 |
# アプリケーション(inglow-sample)のルートディレクトリへ移動する cd /path/inglow-sample # bakeコマンドでマイグレーションファイルを生成する bin/cake bake migration CreateSamples name:string # 実行結果 Creating file /Applications/MAMP/htdocs/inglow-sample/config/Migrations/20200601051932_CreateSamples.php Wrote <strong>`/Applications/MAMP/htdocs/inglow-sample/config/Migrations/20200601051932_CreateSamples.php`</strong> |
20XXXXXX_CreateSamples.php が cakephp/config/Migrations に生成されます。
2.マイグレーション実行
マイグレーションを実行し、samplesテーブルを構築します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# マイグレーションを実行する bin/cake migrations migrate # 実行結果 using migration paths - /Applications/MAMP/htdocs/inglow-sample/config/Migrations using seed paths - /Applications/MAMP/htdocs/inglow-sample/config/Seeds using environment default using adapter mysql using database inglow_db ordering by creation time == 20200601061116 CreateSamples: migrating == 20200601061116 CreateSamples: migrated 0.0214s All Done. Took 0.0286s Dumps the current schema of the database to be used while baking a diff using migration paths - /Applications/MAMP/htdocs/inglow-sample/config/Migrations using seed paths <br>- /Applications/MAMP/htdocs/inglow-sample/config/Seeds Writing dump file `/Applications/MAMP/htdocs/inglow-sample/config/Migrations/schema-dump-default.lock`... Dump file `/Applications/MAMP/htdocs/inglow-sample/config/Migrations/schema-dump-default.lock` was successfully written |
bin/cake migrations migrateを実行することによってデータベースを構成することができます。
phpMyadminでテーブルが作成されているか確認できます。
samplesテーブルの中にidとnameカラムかできていることがわかります。
余談:idをuuidに変更したい場合
先ほど作成したマイグレーションファイルを以下のように設定することでidをuuidに変更することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!--?php declare(strict_types=1); use Migrations\AbstractMigration; class CreateSamples extends AbstractMigration { public $autoId = false; public function change() { $this--->table(‘samples’) //idをuuidに変更します。 ->addColumn('id', 'uuid') //1 つ目の引数にカラム名、2 つ目の引数にタイプ、3 つ目の引数に配列でオプションを渡します。 ->addColumn('name', 'string', ['limit' => 128]) ->addPrimaryKey(['id']) ->create(); } } |
nameにはVARCHAR 型、オプションで limit を渡しているので、長さ128になります。
3.マイグレーションでカラムの追加,変更,削除
マイグレーションはデータベースの構成だけでなくカラムの追加,変更,削除を行うことができます。
カラムの制限なども指定できたりするので詳しく知りたい方はこちらを参考にしてください。
CakePHP公式マイグレーション:https://book.cakephp.org/3/ja/phinx/migrations.html
4.初期データの投入
シーディングという機能を使用することにより初期データを簡単にデータベースに投入できます。
CakePHP公式シーディング:https://book.cakephp.org/3/ja/phinx/seeding.html
1 2 3 4 5 6 |
# seedファイルの生成 bin/cake bake seed Samples # 実行結果 Creating file /Applications/MAMP/htdocs/inglow-sample/config/Seeds/SamplesSeed.php Wrote `/Applications/MAMP/htdocs/inglow-sample/config/Seeds/SamplesSeed.php` |
SamplesSeed.php が cakephp/config/Seeds に生成されます。
今回のsampleテーブルidとnameのみで構成しているため以下のデータを投入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# seedを実行し初期データを投入する bin/cake migrations seed # 実行結果<br> using migration paths - /Applications/MAMP/htdocs/inglow-sample/config/Migrations using seed paths - /Applications/MAMP/htdocs/inglow-sample/config/Seeds using migration paths - /Applications/MAMP/htdocs/inglow-sample/config/Migrations using seed paths - /Applications/MAMP/htdocs/inglow-sample/config/Seeds using environment default using adapter mysql using database inglow_db == SamplesSeed: seeding == SamplesSeed: seeded 0.0066s All Done. Took 0.0078s |
samplesテーブルにデータが投入されたことがわかります。
最後に
今回はsampleテーブルを作成しidとnameのカラムでざっくりとマイグレーションの使用方法を紹介しました。
マイグレーションを行うことにより全ての変更はファイルに保存されるので開発者全員が同じデータベースで作業できたりするメリットもあります。
今回は紹介できなかったマイグレーションの追加,変更,削除については後日記事にしようと思います。
弊社inglowでは、これから広告の運用を考えられている方、あるいはこれから広告代理店に運用をお願いされる方向けに、「業界別Web広告の成功事例」をまとめた資料を無料配布しております。
下記のフォームに入力いただくだけで、無料で資料をダウンロードしていただけます。ぜひご利用下さい。