li3_doctrine / branches / master / readme-ja.wiki
history ## li3_doctrine: Lithium + Doctrine 統合プロジェクト
このプラグインを使うと、アプリケーション開発者は、モデルレイヤーの一部、または全部を[Doctrine Object-Relational Mapper](http://www.doctrine-project.org/)を使ってシームレスに実装できます。
このプラグインをインストールするには、単純に次のようにします (環境に合わせてスラッシュは変更してください):
{{{
cd /path/to/your/app/libraries
git clone code@dev.lithify.me:li3_doctrine.git
}}}
cloneが終わったら、`app/config/bootstrap/libraries.php` を開き、次の行を追加します:
{{{ Libraries::add('li3_doctrine'); }}}
これで準備は完了ですが、Doctrine本体を別途インストールする必要があります。`li3` コマンドへのパスが設定されている場合は、次のコマンドを実行してDoctrineをインストールできます:
{{{
cd .. && li3 doctrine install
}}}
最後に、Doctrine用のデータベース接続設定を `app/config/bootstrap/connections.php` ファイルに次のように記述します:
{{{
Connections::add('default', array(
'type' => 'doctrine',
'driver' => 'pdo_mysql',
'host' => 'localhost',
'user' => 'root',
'password' => 'password',
'dbname' => 'blog_li3'
));
}}}
アプリケーション内でDoctrineのモデルを使うには、次の例のようなDoctrineのエンティティクラスをモデルディレクトリに追加します:
{{{<?php
// app/models/User.php
namespace app\models;
/**
* @Entity
*/
class User
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @Column(type="string", length="255")
*/
protected $name;
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
?>}}}
このモデルをコントローラから利用する手順は次のとおりです。
最初に、必要なnamespaceとuseをコントローラのコードに追加します。
{{{namespace app\controllers;
use \app\models\User;
use \lithium\data\Connections;}}}
アクションメソッド内で、次のように記述できます。
{{{$em = Connections::get('default')->getEntityManager();
$user = new User();
$user->setName('Lithium Guy');
$em->persist($user);
$em->flush();}}}
## リポジトリの使い方
Doctrineでは、データのプレゼンテーション層に 'リポジトリ' を使うことが推奨されています。これは、他の言語では 'データアクセスオブジェクト(Data Access Object)' や 'DAO' と呼ばれているものです。リポジトリには、アプリケーションで利用するデータを取得するようなビジネスロジックを記述します。リポジトリについての詳細は、[DoctrineのWebサイト](http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-objects.html?highlight=repositories#custom-repositories) を参照してください。
リポジトリの配置場所はカスタマイズできますが、```app/repositories``` または ```app/resources/repositories``` に保存することをおすすめします。モデルまたはエンティティで、リポジトリの場所を次のように指定します。
#例
{{{namespace app\models;
/**
* @Entity(repositoryClass="app\resources\repositories\UserRepository")
*/
class User{
}}}
Doctrineライブラリは、Lithiumに組み込まれている名前空間により、ここで指定したクラスの場所からUser用のリポジトリを見つけることができます。
リポジトリ用の ```app/resources/repositories/UserRepository.php``` ファイルを作成します。典型的な内容は次のようになります。
{{{namespace app\resources\repositories;
use Doctrine\ORM\EntityRepository;
use app\models;
class UserRepository extends EntityRepository
{
public function getLithiumGuy()
{
return self::findOneBy(
array('name' => 'Lithium Guy')
);
}
}}}}
## Doctrineコンソールの使い方
Doctrineには高機能なCLI(コマンドラインインターフェイス)があり、さまざまなDoctrineの機能を制御できます。li3_doctrineプラグインを使うと、Doctrineのコンソール機能をアプリケーションから呼び出せます。
`li3` コマンドがシステムパスに設定されている場合、アプリケーションのルートディレクトリに移動し、```li3 doctrine``` というコマンドにより、各種Doctrineコマンドを実行できます。```li3 doctrine``` を実行すると、オプションの一覧が表示されます。モデルやエンティティのプロキシオブジェクトを作成するには、```li3 doctrine orm:generate-proxies``` というコマンドを使います。
これらのコマンドでは、```default``` コネクションがデフォルトで利用されることに注意してください。コマンドで別のコネクションを使いたい場合は、connectionフラグを利用します。例: ```li3 doctrine orm:generate-proxies --connection=other```
## Doctrineマイグレーションの使い方
Doctrineのマイグレーション機能もli3_doctrineプラグインから利用できます。作業中のデータベースへの接続情報を設定し、コマンドラインでアプリケーションのルートディレクトリへ移動して次のコマンドを実行します:
{{{li3 doctrine migrationinstall}}}
このコマンドを実行すると、必要な設定ファイル、ディレクトリ、およびDoctrineのマイグレーションプロジェクトの最新版がインストールされます。
インストールが完了したら、コマンドラインで ```li3 doctrine list migrations``` と入力すると、マイグレーションコマンドのオプションの一覧が表示されます。```li3 doctrine migrations:generate``` コマンドを実行すると、最初のマイグレーションが生成されます。マイグレーションファイルは、yourapp/migrations ディレクトリに保存されます。
すべてのマイグレーションコマンドの詳細は、[Doctrineマイグレーションプロジェクトのドキュメント](http://www.doctrine-project.org/projects/migrations/2.0/docs/en) を参照してください(```./doctrine``` コマンドを ```li3 doctrine``` に置き換えてください)。