Initial commit: apps.supersam24.ru

This commit is contained in:
root committed 2026-10-22 00:04:27 +03:00
commit e955e1da36
6566 files changed
+1271095

No files matched your search

+338
View File
@@ -0,0 +1,338 @@
.. index::
single: Commands
コマンド
########
Phinx は多くのコマンドを使用して実行されます。
マイグレーションコマンド
========================
init コマンド
----------------
init コマンド (initialize の略) は、Phinx のプロジェクトを準備するために使用されます。
このコマンドはプロジェクトディレクトリーのルートに ``phinx.yml`` ファイルを生成します。
.. code-block:: bash
$ cd yourapp
$ phinx init .
このファイルをテキストエディターで開き、プロジェクトの設定を行います。
詳しくは :doc:`設定 <configuration>` の章をご覧下さい。
create コマンド
---------------
create コマンドは、新しいマイグレーションファイルを作成するために使用されます。
1つの引数、つまりマイグレーション名が必要です。
マイグレーション名は、キャメルケース形式で指定する必要があります。
.. code-block:: bash
$ phinx create MyNewMigration
新しいマイグレーションファイルをテキストエディターで開き、データベースの変更を追加します。
Phinx は ``phinx.yml`` ファイルで指定されたパスを使ってマイグレーションファイルを作成します。
詳しくは :doc:`設定 <configuration>` の章をご覧下さい。
代替のテンプレートファイル名を指定することで、
Phinx が使用するテンプレートファイルを上書きすることができます。
.. code-block:: bash
$ phinx create MyNewMigration --template="<file>"
テンプレート生成クラスを提供することもできます。このクラスはインタフェース
``Phinx\Migration\CreationInterface`` を実装しなければなりません。
.. code-block:: bash
$ phinx create MyNewMigration --class="<class>"
マイグレーションのテンプレートを提供するだけでなく、クラスはマイグレーションファイルが
テンプレートから生成されると呼び出されるコールバックを定義することもできます。
``--template`` と ``--class`` の両方を使用することはできません。
migrate コマンド
----------------
migrate コマンドは、すべての使用可能なマイグレーションを実行します。
オプションで特定のバージョンまで実行できます。
.. code-block:: bash
$ phinx migrate -e development
特定のバージョンにマイグレーションするには、 ``--target`` パラメーターまたは省略して
``-t`` を使用します。
.. code-block:: bash
$ phinx migrate -e development -t 20110103081132
``--dry-run`` を使って、クエリーを実行せずに標準出力に出力します。
.. code-block:: bash
$ phinx migrate --dry-run
rollback コマンド
-----------------
rollback コマンドは、Phinx によって実行された以前のマイグレーションを取り消すために使用されます。
これは、migrate コマンドの反対です。
引数を指定せずに ``rollback`` コマンドを使用すると、以前の移行にロールバックすることができます。
.. code-block:: bash
$ phinx rollback -e development
すべてのマイグレーションを特定のバージョンにロールバックするには、 ``--target`` パラメーターまたは
省略して ``-t`` を使用します。
.. code-block:: bash
$ phinx rollback -e development -t 20120103083322
ターゲットバージョンとして 0 を指定すると、すべてのマイグレーションが元に戻ります。
.. code-block:: bash
$ phinx rollback -e development -t 0
すべてのマイグレーションを特定の日付にロールバックするには、 ``--date`` パラメーターまたは省略して
``-d`` を省略して使用します。
.. code-block:: bash
$ phinx rollback -e development -d 2012
$ phinx rollback -e development -d 201201
$ phinx rollback -e development -d 20120103
$ phinx rollback -e development -d 2012010312
$ phinx rollback -e development -d 201201031205
$ phinx rollback -e development -d 20120103120530
ブレークポイントが設定され、さらにロールバックをブロックしている場合は、 ``--force`` パラメーターまたは
``-f`` を使ってブレークポイントをオーバーライドすることができます。
.. code-block:: bash
$ phinx rollback -e development -t 0 -f
``--dry-run`` を使って、クエリーを実行せずに標準出力に出力します。
.. code-block:: bash
$ phinx rollback --dry-run
.. note::
ロールバックすると、Phinx は ``phinx.yml`` ファイルの ``version_order`` オプションで
指定された順序で実行されたマイグレーションを処理します。
詳しくは :doc:`設定 <configuration>` の章をご覧下さい。
status コマンド
---------------
status コマンドは、すべてのマイグレーションのリストを現在のステータスとともに表示します。
このコマンドを使用して、実行されたマイグレーションを確認できます。
.. code-block:: bash
$ phinx status -e development
このコマンドは、データベースが最新の場合(つまり、すべてのマイグレーションが稼働している場合)
コード0で終了します。またはそれ以外の場合は、次のコードのいずれかで終了します。
* 1: 実行されるマイグレーションが少なくとも1つ残っています。
* 2: マイグレーションが実行され、データベースに記録されましたが、マイグレーションファイルが有りません。
breakpoint コマンド
-------------------
breakpoint コマンドは、ブレークポイントを設定するために使用され、ロールバックを制限することができます。
最新のマイグレーションのブレークポイントは、パラメーターを指定しないで切り替えることができます。
.. code-block:: bash
$ phinx breakpoint -e development
特定のバージョンでブレークポイントを切り替えるには、 ``--target`` パラメーターまたは省略して
``-t`` を使用します。
.. code-block:: bash
$ phinx breakpoint -e development -t 20120103083322
全てのブレークポイントを削除するには、 ``--remove-all`` パラメーターまたは省略して
``-r`` を使用します。
.. code-block:: bash
$ phinx breakpoint -e development -r
ブレークポイントは、 ``status`` コマンドを実行すると表示されます。
データベースの初期データ投入
============================
seed:create コマンド
--------------------
seed:create コマンドを使用して、新しいデータベースシードクラスを作成できます。
1つの引数、クラスの名前が必要です。クラス名はキャメルケース形式で指定する必要があります。
.. code-block:: bash
$ phinx seed:create MyNewSeeder
テキストエディターで新しいシードファイルを開き、データベースシードコマンドを追加します。
Phinx は ``phinx.yml`` ファイルで指定されたパスを使ってシードファイルを作成します。
詳しくは :doc:`設定 <configuration>` の章をご覧下さい。
seed:run コマンド
-----------------
seed:run コマンドは、使用可能なすべてのシードクラスを実行するか、オプションで1つだけを実行します。
.. code-block:: bash
$ phinx seed:run -e development
シードクラスを1つだけ実行するには、 ``--seed`` パラメーターまたは省略して ``-s`` を使用します。
.. code-block:: bash
$ phinx seed:run -e development -s MyNewSeeder
設定ファイルパラメーター
------------------------
コマンドラインから Phinx を実行するときは、 ``--configuration`` または
``-c`` パラメーターを使って設定ファイルを指定することができます。
YAML に加えて、設定ファイルは PHP 配列として PHP ファイルの計算された出力でもよいです。
.. code-block:: php
<?php
return [
"paths" => [
"migrations" => "application/migrations"
],
"environments" => [
"default_migration_table" => "phinxlog",
"default_database" => "dev",
"dev" => [
"adapter" => "mysql",
"host" => $_ENV['DB_HOST'],
"name" => $_ENV['DB_NAME'],
"user" => $_ENV['DB_USER'],
"pass" => $_ENV['DB_PASS'],
"port" => $_ENV['DB_PORT'],
]
]
];
Phinx は ``*.yml`` と ``*.php`` 拡張子を持つファイルにどの言語パーサーを使うかを自動的に検出します。
適切なパーサーは、 ``--parser`` と ``-p`` パラメーターで指定することもできます。
``"php"`` 以外は YAML として扱われます。
PHP 配列を使用する場合、既存の PDO インスタンスに ``connection`` キーを提供することができます。
Phinx は ``hasTable()`` のような特定のメソッドに対してデータベース名を必要とするため、
データベース名も渡すことも重要です。
.. code-block:: php
<?php
return [
"paths" => [
"migrations" => "application/migrations"
],
"environments" => [
"default_migration_table" => "phinxlog",
"default_database" => "dev",
"dev" => [
"name" => "dev_db",
"connection" => $pdo_instance
]
]
];
ウェブアプリ内で Phinx を実行
-----------------------------
Phinx は ``Phinx\Wrapper\TextWrapper`` クラスを使ってウェブアプリケーションの内部で
実行することもできます。この例は ``app/web.php`` で提供されています。
これはスタンドアロンサーバーとして実行できます。
.. code-block:: bash
$ php -S localhost:8000 vendor/robmorgan/phinx/app/web.php
これはデフォルトで現在のマイグレーションの状態を表示する `<http://localhost:8000>`__
にローカルウェブサーバーを作成します。マイグレーションを実行するには、
`<http://localhost:8000/migrate>`__ を使用し、ロールバックには
`<http://localhost:8000/rollback>`__ を使用します。
**付属のウェブアプリは一例に過ぎません、本番環境では使用しないでください!**
.. note::
実行時に設定変数を変更し、 ``%%PHINX_DBNAME%%`` やその他の動的オプションを変更するには、
コマンドを実行する前に ``$_SERVER['PHINX_DBNAME']`` を設定します。
使用可能なオプションは、設定ページに記載されています。
PHPUnit で Phinx を使用
-----------------------
Phinx は、ユニットテスト内でデータベースを準備またはシードするために使用できます。
プログラムによって使用することができます。
.. code-block:: php
public function setUp ()
{
$app = new PhinxApplication();
$app->setAutoExit(false);
$app->run(new StringInput('migrate'), new NullOutput());
}
メモリーデータベースを使用する場合は、Phinx に特定の PDO インスタンスを提供する必要があります。
Manager クラスを使用して Phinx と直接対話することができます。
.. code-block:: php
use PDO;
use Phinx\Config\Config;
use Phinx\Migration\Manager;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\NullOutput;
class DatabaseTestCase extends TestCase {
public function setUp ()
{
$pdo = new PDO('sqlite::memory:', null, null, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
$configArray = require('phinx.php');
$configArray['environments']['test'] = [
'adapter' => 'sqlite',
'connection' => $pdo
];
$config = new Config($configArray);
$manager = new Manager($config, new StringInput(' '), new NullOutput());
$manager->migrate('test');
$manager->seed('test');
// シード後にデフォルトのフェッチモードを変更することができます
$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$this->pdo = $pdo;
}
}
+9
View File
@@ -0,0 +1,9 @@
import sys, os
# Append the top level directory of the docs, so we can import from the config dir.
sys.path.insert(0, os.path.abspath('..'))
# Pull in all the configuration options defined in the global config file..
from config.all import *
language = 'ja'
+305
View File
@@ -0,0 +1,305 @@
.. index::
single: Configuration
構成設定
=============
:doc:`init コマンド <commands>` を使ってプロジェクトを初期化すると、
Phinx はプロジェクトディレクトリーのルートに ``phinx.yml`` というデフォルトファイルを作成します。
このファイルは、YAML データのシリアル化形式を使用します。
``--configuration`` コマンドラインオプションが与えられた場合、Phinx は指定されたファイルを
ロードします。それ以外の場合は、 ``phinx.php`` 、 ``phinx.json`` または ``phinx.yml``
を見つけて、最初に見つかったファイルを読み込みます。詳しくは、 :doc:`コマンド <commands>`
の章をご覧下さい。
.. warning::
設定ファイルは、ウェブサーバー上の一般公開されているディレクトリーの外に保存してください。
このファイルにはデータベースの信用情報が含まれており、
誤ってプレーンテキストとして提供される可能性があります。
JSON ファイルと YAML ファイルは *パース* されますが、PHP ファイルは *インクルード* されています。
つまり、こういうことです。
* 設定項目の配列を `return` する必要があります。
* 変数スコープはローカルです。つまり、初期化ファイルが読み取ったり変更したりするグローバル変数を
明示的に宣言する必要があります。
* その標準出力は抑制されます。
* JSON や YAML とは異なり、環境接続の詳細を省略し、代わりに初期化された PDO インスタンスを含む
``connection`` を指定することができます。
これは、マイグレーションがアプリケーションとやり取りしたり、同じ接続を共有したりする場合に便利です。
ただし、Phinx は PDO 接続からデータベース名を推測できないため、データベース名を渡すことを
忘れないでください。
::
<?php
require 'app/init.php';
global $app;
$pdo = $app->getDatabase()->getPdo();
return ['environments' =>
[
'default_database' => 'development',
'development' => [
'name' => 'devdb',
'connection' => $pdo,
]
]
];
マイグレーションのパス
----------------------
最初のオプションは、マイグレーションのディレクトリーへのパスを指定します。
デフォルトでは Phinx は ``%%PHINX_CONFIG_DIR%%/db/migrations`` を使用します。
.. note::
``%%PHINX_CONFIG_DIR%%`` は特別なトークンで、
``phinx.yml`` ファイルが保存されているルートディレクトリーに自動的に置き換えられます。
デフォルトの ``%%PHINX_CONFIG_DIR%%/db/migrations`` を上書きするには、
yaml 設定に次の行を追加する必要があります。
.. code-block:: yaml
paths:
migrations: /your/full/path
また、設定内の配列を使用して複数のマイグレーションパスを提供することもできます。
.. code-block:: yaml
paths:
migrations:
- application/module1/migrations
- application/module2/migrations
パスに ``%%PHINX_CONFIG_DIR%%`` トークンを使うこともできます。
.. code-block:: yaml
paths:
migrations: '%%PHINX_CONFIG_DIR%%/your/relative/path'
マイグレーションは ``glob`` で取り込まれるので、複数のディレクトリーのパターンを定義することができます。
.. code-block:: yaml
paths:
migrations: '%%PHINX_CONFIG_DIR%%/module/*/{data,scripts}/migrations'
カスタムベースクラス
---------------------
デフォルトでは、すべてのマイグレーションは Phinx の ``AbstractMigration`` クラスを継承します。
これは、設定の中で ``migration_base_class`` を設定することによって、 ``AbstractMigration``
を継承したカスタムクラスに設定することができます。
.. code-block:: yaml
migration_base_class: MyMagicalMigration
シードのパス
------------
2番目のオプションは、シードディレクトリーへのパスを指定します。
デフォルトでは Phinx は ``%%PHINX_CONFIG_DIR%%/db/seeds`` を使用します。
.. note::
``%%PHINX_CONFIG_DIR%%`` は特別なトークンで、
``phinx.yml`` ファイルが保存されているルートディレクトリーに自動的に置き換えられます。
デフォルトの ``%%PHINX_CONFIG_DIR%%/db/seeds`` を上書きするには、
yaml 設定に以下を追加する必要があります。
.. code-block:: yaml
paths:
seeds: /your/full/path
また、設定内で配列を使用して複数のシードパスを指定することもできます。
.. code-block:: yaml
paths:
seeds:
- /your/full/path1
- /your/full/path2
パスに ``%%PHINX_CONFIG_DIR%%`` トークンを使うこともできます。
.. code-block:: yaml
paths:
seeds: '%%PHINX_CONFIG_DIR%%/your/relative/path'
環境
----
Phinx の主な機能の1つは、複数のデータベース環境をサポートすることです。Phinx を使用して、
開発環境でマイグレーションを作成した後、本番環境で同じマイグレーションを実行することができます。
環境は ``environments`` 以下にネストされたコレクションで指定されます。例:
.. code-block:: yaml
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
host: localhost
name: production_db
user: root
pass: ''
port: 3306
charset: utf8
collation: utf8_unicode_ci
上記は ``production`` と呼ばれる新しい環境を定義します。
複数の開発者が同じプロジェクトで作業し、それぞれが異なる環境を持つ状況
(例えば、 ``<environment type>-<developer name>-<machine name>`` のような規約)、
または、別々の目的(ブランチ、テストなど)のために別々の環境を持つ必要がある場合には、
環境変数 `PHINX_ENVIRONMENT` を使用して yaml ファイルのデフォルト環境を上書きします。
.. code-block:: bash
export PHINX_ENVIRONMENT=dev-`whoami`-`hostname`
テーブルのプレフィクスとサフィックス
------------------------------------
テーブルのプレフィックスとサフィックスを定義することができます。
.. code-block:: yaml
environments:
development:
....
table_prefix: dev_
table_suffix: _v1
testing:
....
table_prefix: test_
table_suffix: _v2
ソケット接続
------------
MySQL アダプターを使用する場合、ネットワーク接続の代わりにソケットを使用することもできます。
ソケットのパスは ``unix_socket`` で設定されます。
.. code-block:: yaml
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
name: production_db
user: root
pass: ''
unix_socket: /var/run/mysql/mysql.sock
charset: utf8
外部変数
--------
Phinx は ``PHINX_`` というプレフィックスが付いた環境変数を自動的に取得し、
設定ファイルのトークンとして利用できるようにします。
トークンは変数とまったく同じ名前になりますが、どちらの側にも2つの
``%%`` のシンボルをラップすることによってアクセスする必要があります。
例: ``%%PHINX_DBUSER%%`` 。これは、秘密のデータベース資格情報をバージョン管理システムではなく
サーバーに直接格納する場合に特に便利です。この機能は、次の例で簡単に実証できます。
.. code-block:: yaml
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
host: '%%PHINX_DBHOST%%'
name: '%%PHINX_DBNAME%%'
user: '%%PHINX_DBUSER%%'
pass: '%%PHINX_DBPASS%%'
port: 3306
charset: utf8
サポートするアダプター
----------------------
Phinx は現在、次のデータベースアダプターをネイティブにサポートしています。
* `MySQL <http://www.mysql.com/>`_: ``mysql`` アダプターを指定。
* `PostgreSQL <http://www.postgresql.org/>`_: ``pgsql`` アダプターを指定。
* `SQLite <http://www.sqlite.org/>`_: ``sqlite`` アダプターを指定。
* `SQL Server <http://www.microsoft.com/sqlserver>`_: ``sqlsrv`` アダプターを指定。
SQLite
~~~~~~
SQLite データベースを宣言すると、単純化された構造が使用されます。
.. code-block:: yaml
environments:
development:
adapter: sqlite
name: ./data/derby
testing:
adapter: sqlite
memory: true # *任意* の値で memory を設定すると、 name が上書きされます
SQL Server
~~~~~~~~~~
``sqlsrv`` アダプターを使用して名前付きインスタンスに接続するときは、
SQL Server が自動的にポートをネゴシエートするので、 ``port`` 設定を省略してください。
さらに、 ``charset: utf8`` を省略するか、SQL Server の UTF8 に対応する
``charset: 65001`` に変更してください。
カスタムアダプター
~~~~~~~~~~~~~~~~~~
``Phinx\\Db\\Adapter\\AdapterInterface`` の実装を ``AdapterFactory`` で登録することで
カスタムアダプターを提供できます。
.. code-block:: php
$name = 'fizz';
$class = 'Acme\Adapter\FizzAdapter';
AdapterFactory::instance()->registerAdapter($name, $class);
アダプターは `$app->run()` が呼び出される前にいつでも登録することができます。
通常は `bin/phinx` によって呼び出されます。
エイリアス
----------
テンプレート作成クラス名は、別名をつけて :doc:`create コマンド<commands>` の
``--class`` コマンドラインオプションで使うことができます。
エイリアス化されたクラスは ``Phinx\Migration\CreationInterface`` インタフェースを実装する
必要があります。
.. code-block:: yaml
aliases:
permission: \Namespace\Migrations\PermissionMigrationTemplateGenerator
view: \Namespace\Migrations\ViewMigrationTemplateGenerator
バージョンの順序
----------------
マイグレーションの状態をロールバックまたは表示するとき、Phinx は ``version_order``
オプションに従って実行されたマイグレーションを処理します。これは次の値をとります。
* ``creation`` (デフォルト): マイグレーションはファイル名の一部でもある作成時間順に並べ替えられます。
* ``execution``: マイグレーションは実行時間(開始時間とも呼ばれます)によって順序付けられます。
+12
View File
@@ -0,0 +1,12 @@
コンテンツ
===========
.. toctree::
:maxdepth: 2
:caption: Phinx
index
migrations
seeding
commands
configuration
+60
View File
@@ -0,0 +1,60 @@
Phinx マイグレーション
######################
Phinx は、データベースのマイグレーションを管理するためのスタンドアロンのコマンドラインツールです。
CakePHP の公式 Migrations プラグインはこのツールに基づいています。
Phinx は、あなたの PHP アプリケーションのデータベースマイグレーションを超簡単に管理できます。
5分以内に、Composer を使用して Phinx をインストールし、最初のデータベースマイグレーションを作成できます。
Phinx は、データベース ORM システムやアプリケーションフレームワークを使わずに、マイグレーションします。
はじめに
============
良い開発者は常に SCM システムを使ってコードをバージョン管理します。それでは、なぜ、
データベーススキーマについても同じことをしないのでしょうか?
Phinx は、開発者がデータベースを明確かつ簡潔な方法で変更および操作できるようにします。
これは手作業で SQL を書くことを避け、代わりに PHP コードを使用してマイグレーションを作成するための
強力な API を提供します。開発者は、好みの SCM システムを使用して、これらのマイグレーションを
バージョン管理することができます。これにより、異なるデータベースシステム間で Phinx のマイグレーションを
移植可能にします。Phinx はどのマイグレーションが実行されたかを把握しているので、
データベースの状態については心配する必要はなく、より良いソフトウェアを構築することに
集中することができます。
ゴール
=======
Phinx は以下の目標を念頭に置いて開発されました。
* 最も普及しているデータベースベンダー間の可搬性。
* PHP フレームワークに依存しない。
* シンプルなインストール手順。
* 使いやすいコマンドライン操作。
* 他のさまざまな PHP ツール(Phing、PHPUnit)やウェブフレームワークとの統合。
インストール
=============
Phinx は、PHP の依存関係管理のためのツールである Composer を使用してインストールする必要があります。
詳しくは `Composer <https://getcomposer.org/>`_ のウェブサイトを見てください。
.. note::
Phinx には少なくともPHP 5.4(またはそれ以降)が必要です。
Phinx をインストールするには、Composer を使用する必要があります。
.. code-block:: bash
php composer.phar require robmorgan/phinx
適切なパーミッションを持つ ``db/migrations`` 構造に従って、プロジェクト内にフォルダーを作成します。
これは、マイグレーションファイルが存在し、書き込み可能である場所です。
今、プロジェクト内から Phinx を実行できるようになりました。
.. code-block:: bash
vendor/bin/phinx init
File diff suppressed because it is too large. Load diff
+214
View File
@@ -0,0 +1,214 @@
.. index::
single: Database Seeding
データベースの初期データ投入
============================
バージョン0.5.0 では、Phinx はデータベースにテストデータをシードするためのサポートを導入しました。
シードクラスは、作成済みのデータをデータベースに簡単に投入するための優れた方法です。
デフォルトでは ``seeds`` ディレクトリーに保存されます。 ただし、このパスは設定ファイルで変更できます。
.. note::
データベースのシードは完全にオプションで、
Phinx はデフォルトで ``seeds`` ディレクトリーを作成しません。
シードクラスの新規作成
----------------------
Phinx には、新しいシードクラスを簡単に生成するコマンドが含まれています。
.. code-block:: bash
$ php vendor/bin/phinx seed:create UserSeeder
複数のシードのパスを指定した場合は、新しいシードクラスを作成するパスを選択するように求められます。
以下は、スケルトンテンプレートを元にしています。 ::
<?php
use Phinx\Seed\AbstractSeed;
class MyNewSeeder extends AbstractSeed
{
/**
* Run Method.
*
* Write your database seeder using this method.
*
* More information on writing seeders is available here:
* http://docs.phinx.org/en/latest/seeding.html
*/
public function run()
{
}
}
AbstractSeed クラス
-------------------
すべての Phinx のシードは ``AbstractSeed`` クラスを継承します。
このクラスは、シードクラスを作成するために必要なサポートを提供します。
シードクラスは主にテストデータの挿入に使用されます。
run メソッド
~~~~~~~~~~~~
run メソッドは、 `seed:run` コマンドを実行すると、Phinx によって自動的に呼び出されます。
このメソッドを使用してテストデータを挿入してください。
.. note::
マイグレーションとは異なり、Phinx はどのシードクラスが実行されたかを把握していません。
これは、データベースシーダーを繰り返し実行できることを意味します。
開発時にはこのことに留意してください。
データの挿入
------------
Table オブジェクトの使用
~~~~~~~~~~~~~~~~~~~~~~~~
シードクラスは、使い慣れた ``Table`` オブジェクトを使ってデータを挿入することもできます。
シードクラス内から ``table()`` メソッドを呼び出し、 ``insert()`` メソッドを使用して
データを挿入することで、Table オブジェクトのインスタンスを取得できます。 ::
<?php
use Phinx\Seed\AbstractSeed;
class PostsSeeder extends AbstractSeed
{
public function run()
{
$data = [
[
'body' => 'foo',
'created' => date('Y-m-d H:i:s'),
],
[
'body' => 'bar',
'created' => date('Y-m-d H:i:s'),
]
];
$posts = $this->table('posts');
$posts->insert($data)
->save();
}
}
.. note::
``save()`` メソッドを呼び出して、データをテーブルにコミットする必要があります。
Phinx はデータをバッファリングします。
Faker ライブラリーとの統合
~~~~~~~~~~~~~~~~~~~~~~~~~~
シードクラスですばらしい `Faker ライブラリー <https://github.com/fzaninotto/Faker>`_
を使うのは簡単です。Composer を使用してインストールするだけです。
.. code-block:: bash
$ composer require fzaninotto/faker
そして、シードクラスの中で、それを使用してください。 ::
<?php
use Phinx\Seed\AbstractSeed;
class UserSeeder extends AbstractSeed
{
public function run()
{
$faker = Faker\Factory::create();
$data = [];
for ($i = 0; $i < 100; $i++) {
$data[] = [
'username' => $faker->userName,
'password' => sha1($faker->password),
'password_salt' => sha1('foo'),
'email' => $faker->email,
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'created' => date('Y-m-d H:i:s'),
];
}
$this->insert('users', $data);
}
}
テーブルのデータ消去
--------------------
データを挿入することに加えて、Phinx は SQL の ``TRUNCATE`` コマンドを使って
テーブルを空にすることを容易にします。 ::
<?php
use Phinx\Seed\AbstractSeed;
class UserSeeder extends AbstractSeed
{
public function run()
{
$data = [
[
'body' => 'foo',
'created' => date('Y-m-d H:i:s'),
],
[
'body' => 'bar',
'created' => date('Y-m-d H:i:s'),
]
];
$posts = $this->table('posts');
$posts->insert($data)
->save();
// テーブルを空にします
$posts->truncate();
}
}
.. note::
SQLite は ``TRUNCATE`` コマンドをネイティブにサポートしていないので、 ``DELETE FROM``
が使用されています。テーブルのデータ消去後、 ``VACUUM`` コマンドを呼び出すことをお勧めします。
Phinx はこれを自動的には行いません。
シードクラスの実行
------------------
これは簡単な部分です。データベースをシードするには、 ``seed:run`` コマンドを使います。
.. code-block:: bash
$ php vendor/bin/phinx seed:run
デフォルトでは、Phinx は利用可能なすべてのシードクラスを実行します。
特定のクラスを実行したい場合は、 ``-s`` パラメーターを使ってそのクラスの名前を渡します。
.. code-block:: bash
$ php vendor/bin/phinx seed:run -s UserSeeder
複数のシーダーを実行することもできます。
.. code-block:: bash
$ php vendor/bin/phinx seed:run -s UserSeeder -s PermissionSeeder -s LogSeeder
``-v`` パラメーターを使用して、より詳細な出力を表示することもできます。
.. code-block:: bash
$ php vendor/bin/phinx seed:run -v
Phinx のシード機能は、テストデータをデータベースに簡単かつ繰り返し挿入するための
簡単なメカニズムを提供します。