Doctrine 及び zf2 開発者の Marco Pivetta 氏によるこちらのプレゼンテーションが大変参考になります。
http://marco-pivetta.com/doctrine-orm-zf2-tutorial/#/
インストール
composer を使い ZendDeveloperTools と DoctrineORMModule を導入します。
composer require zendframework/zend-developer-tools:dev-master
composer require doctrine/doctrine-orm-module
zf2のモジュールとして追加
プロジェクトにモジュールを組み込みます。
'modules' => array(
'ZendDeveloperTools',
'DoctrineModule',
'DoctrineORMModule',
'Application'
),
標準の設定をインポート
ZendDeveloperTool の設定ファイルを取り込みます。
cp vendor/zendframework/zend-developer-tools/config/zenddevelopertools.local.php.dist config/autoload/zdt.local.php
エンティティクラス作成
データを保持するクラスを作ります。
PHP の情報だけでは足りませんので、メタデータをコメント内に書き込みます。
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/** @ORM\Entity */
class User {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
protected $id;
/** @ORM\Column(type="string") */
protected $fullName;
// getter や setter を以下に書く
}
マッピング
ORM のマッピング設定を、モジュール設定に加えます。
'doctrine' => array(
'driver' => array(
'application_entities' => array(
'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/Application/Entity')
),
'orm_default' => array(
'drivers' => array(
'Application\Entity' => 'application_entities'
)
)
)
確認
web サーバを起動してみます。
cd public
php -S 0.0.0.0:3000 index.php
ブラウザでアクセスすると、 ZendDeveloperTools の力によって、フッタにプロファイル情報が出ますが、その右の方に Doctrine ORM の情報が出ます。
DBと接続
接続設定
DB接続情報をプロジェクトに加えます。
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => 'username',
'password' => 'password',
'dbname' => 'database',
)))));
スキーマ検証
スキーマを検証します。
Doctrineモジュールに関わる操作は、コマンドラインツール doctrine-module を利用します。
./vendor/bin/doctrine-module orm:validate-schema
テーブル作成
DBにテーブルを作成します。
DBの起動、接続先DBの作成を忘れないようにしましょう。
./vendor/bin/doctrine-module orm:schema-tool:create
確認
コントローラに書いたコードで、動作確認して終了です。
setFullName() などの getter, setter はエンティティクラスに加えるようにしましょう。
public function indexAction() {
$objectManager = $this
->getServiceLocator()
->get('Doctrine\ORM\EntityManager');
$user = new \Application\Entity\User();
$user->setFullName('Marco Pivetta');
$objectManager->persist($user);
$objectManager->flush();
var_dump($user->getId());
}
その他参考
Doctrine の使い方
http://docs.sympony.gr.jp/symfony2/book/doctrine.html