LoginSignup
8
10

More than 5 years have passed since last update.

Zend Framework 2 に Doctrine 2 ORM を導入する

Last updated at Posted at 2014-12-03

Doctrine 及び zf2 開発者の Marco Pivetta 氏によるこちらのプレゼンテーションが大変参考になります。
http://marco-pivetta.com/doctrine-orm-zf2-tutorial/#/

インストール

composer を使い ZendDeveloperToolsDoctrineORMModule を導入します。

composer require zendframework/zend-developer-tools:dev-master
composer require doctrine/doctrine-orm-module

zf2のモジュールとして追加

プロジェクトにモジュールを組み込みます。

config/application.config.php
    'modules' => array(
        'ZendDeveloperTools',
        'DoctrineModule',
        'DoctrineORMModule',
        'Application'
    ),

標準の設定をインポート

ZendDeveloperTool の設定ファイルを取り込みます。

cp vendor/zendframework/zend-developer-tools/config/zenddevelopertools.local.php.dist config/autoload/zdt.local.php

エンティティクラス作成

データを保持するクラスを作ります。
PHP の情報だけでは足りませんので、メタデータをコメント内に書き込みます。

module/Application/src/Application/Entity/User
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 のマッピング設定を、モジュール設定に加えます。

module/Application/config/module.config.php
'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

スクリーンショット 2014-12-03 15.33.38.png

ブラウザでアクセスすると、 ZendDeveloperTools の力によって、フッタにプロファイル情報が出ますが、その右の方に Doctrine ORM の情報が出ます。

DBと接続

接続設定

DB接続情報をプロジェクトに加えます。

config/autoload/doctrine.local.php
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 はエンティティクラスに加えるようにしましょう。

module/Application/src/Application/Controller/IndexController.php
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

8
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10