PHPのORM、Parisをいじる

試した環境環境

  1. Amazon Linux AMI release 2015.09
  2. PHP 5.6.14
  3. PostgreSQL 9.2.14

導入前にその他のインストールや設定

sudo yum install php56
sudo yum install postgresql-server
sudo yum install php56-pdo
sudo yum install php56-pgsql

sudo service postgresql initdb
sudo service postgresql start

sudo su - postgres
createdb demo
createuser apache

テストで使う時はpg_hba.confの設定をtrustにすると楽

マイグレーション

Paris自身にマイグレーションの機能はない。

"davedevelopment/phpmig": "*"

[phpmig]PHPでマイグレーション - Qiita

composer.jsonのrequireに上記を追加

php composer.phar install

[phpmig]PHPでマイグレーション - Qiita

phpmig init .

[phpmig]PHPでマイグレーション - Qiita

composerのvender/bin/phpmigなので、実行環境によってパスは変わる。
引数のパスでphpmigのマイグレーションが行えるようになる

$container['db'] = new PDO("pgsql:dbname=〜");

phpmig.phpに上記を追加する。

phpmig status

マイグレーションの状態を表示する。
動作的にgit statusに似てる。かも。

phpmig generate Table .

マイグレーション用のコードを自動生成する。

getContainer();
$db['db']->exec('
CREATE TABLE Table (
id INTEGER PRIMARY KEY
)');
}

/**
* Undo the migration
*/
public function down()
{
$db = $this->getContainer();
$db['db']->exec('DROP TABLE Table;');
}
}

phpmig generateで自動生成されたクラスにはup()とdown()があるので、そこにcreate tableやdrop tableを記述する。

phpmig migrate

up()が実行される。
var_dumpをup()に埋め込んでいた場合、このコマンドを打つ時に表示される。

phpmig rollback

dowm()が実行される。



呼び出し


demo.phpの動作

demo.phpは「vendor/j4mie/idiorm/」にある。
PostgreSQLで動かす場合はちょっといじる必要がある。

ORM::configure('pgsql:dbname=demo;host=localhost;port=5432');

$db->exec("
CREATE TABLE IF NOT EXISTS contact (
id SERIAL PRIMARY KEY,
name TEXT,
email TEXT
);"
);

demo.phpSQLiteで動くので、PostgreSQL的に書き直す。
configureにはPDOと同じような設定を書く。
$DB->exec内の一意キーはSERIALに変更する。