LoginSignup
0
1

More than 5 years have passed since last update.

[PHP][Silex][Doctrine] Silex 2へDoctrine ORMを導入する

Last updated at Posted at 2017-07-26

Silex 2にはDoctrine DBALが同梱されていますが、やっぱりORMでプログラム書きたいので、Doctrine ORMを導入します。

導入手順

ステップ 1 - Doctrine ORMの導入

まずDoctrine ORMをcomposerで入れます。

% php composer.phar require doctrine/orm symfony/yaml

ステップ 2 - サービスプロバイダの導入

ありがたいことにDoctrine ORMをSilexのDIコンテナに載せてくれるサービスプロバイダが公開されていますので、それを導入します。

Doctrine ORM Service Provider → https://github.com/dflydev/dflydev-doctrine-orm-service-provider

% php composer.phar require dflydev/doctrine-orm-service-provider

ステップ 3 - 設定ファイルの作成

doctrineコマンドラインツールを使うための設定ファイル

vendor/bin/doctrine コマンドを使うための設定ファイルを作成します。
設定ファル内でDoctrineのEntity Managerを生成します。

config/cli-config.php
use Doctrine\ORM\Tools\Console\ConsoleRunner;

// replace with file to your own project bootstrap
require_once dirname(__DIR__).'/src/app.php';
require_once 'dev.php';

// replace with mechanism to retrieve EntityManager in your app
$entityManager = $app['orm.em'];

Doctrine ORM Service Providerのおかげで、$app['orm.em']を参照するだけです。

データベース接続用の設定

Silexでも使うprod.phpdev.phpを編集します。

config\prod.php
// DBへの接続情報です。本番環境用です。
$app['db.options'] = array(
    'driver' => 'pdo_mysql',
    'dbname' => 'mm',
    'host'   => 'localhost',
    'user'   => 'mm_user',
    'password' => 'mm_pass'
);

// Doctrine ORMの設定です。
// マッピングの定義方法(ここでは「annotation」を選んでます)
// エンティティのネームスペース
// エンティティクラスファイルのあるパス
$app['orm.em.options'] = array(
    'mappings' => array(
        array(
            'type' => 'annotation',
            'namespace' => 'ML\Entity',
            'path' => dirname(__DIR__).'/src/MM/Entity'
        )
    )
);

// 生成するプロキシクラスファイルの置き場
$app['orm.proxies_dir'] = dirname(__DIR__).'/src/MM/Proxy';
config/dev.php
// 開発環境での接続設定です。
$app['db.options'] = array(
    'driver' => 'pdo_mysql',
    'dbname' => 'mm_dev',
    'host'   => 'localhost',
    'user'   => 'mm_user',
    'password' => 'mm_pass'
);

(休憩)

ここまでくれば、vendor/bin/doctrineコマンドが動くはずです。
試してみてください。

使い方

使い方 1 - エンティティクラスの作成

エンティティクラスを作成します。

例えば以下のような内容です。

src/MM/Entity/User.php
namespace MM\Entity;

/**
 * User Entity
 *
 * @Entity(repositoryClass="MM\Repository\UserRepository")
 * @Table(name="users")
 */
class User
{
    /**
     * ID
     *
     * @Id
     * @Column(type="guid")
     * @GeneratedValue(strategy="UUID")
     */
    private $uuid;

    /**
     * email
     *
     * @Column(type="string",length=512)
     */
    private $email;

    // (略)
}

setter/getterも必要に応じて定義します。

使い方 2 - レポジトリクラスの生成

doctrineコマンドを使います。

% ./vendor/bin/doctrine orm:generate-repositories src

レポジトリクラスが生成されます。
中身空っぽなので、使わなければ要らないです。

使い方 3 - テーブルの作成

データベースにテーブルを作成します。

% ./vendor/bin/doctrine orm:schema-tool:create

エンティティクラスを修正し、テーブルを更新するときはこのようにします。

% ./vendor/bin/doctrine orm:schema-tool:update --force
0
1
0

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
0
1