Zend Framework 2 と Doctrine (どちらも最新の安定バージョン) を使用するアプリケーションを作成しています。Zend Form と組み合わせてドクトリン エンティティをデータベースに保存する方法については、多くのドキュメント (主にチュートリアルとブログ投稿) があります。残念ながら、それらは一対多または多対多の関係を持たない単純なエンティティのみを扱います。
これは、私が自分のコードに採用した例の 1 つです。
http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/
この例のアルバム エンティティでは、アーティストは (すでに長い) チュートリアルをできるだけ単純にするための文字列であることを理解しています。しかし、実際の状況では、これはもちろん、アーティスト エンティティとの 1 対多の関係 (または多対多の関係) になります。ビューでは、アーティストを選択できる場所に選択ボックスを表示し、データベースで見つかったすべてのアーティスト エンティティを一覧表示して、適切なアーティストを選択できるようにします。
アルバムの例に従って、コントローラーで「編集」アクションを設定した方法は次のとおりです。
public function editAction()
{
// determine the id of the album we're editing
$id = $this->params()->fromRoute("id", false);
$request = $this->getRequest();
// load and set up form
$form = new AlbumForm();
$form->prepareElements();
$form->get("submit")->setAttribute("label", "Edit");
// retrieve album from the service layer
$album = $this->getSl()->get("Application\Service\AlbumService")->findOneByAlbumId($id);
$form->setBindOnValidate(false);
$form->bind($album);
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
// bind formvalues to entity and save it
$form->bindValues();
$this->getEm()->flush();
// redirect to album
return $this->redirect()->toRoute("index/album/view", array("id"=>$id));
}
}
$data = array(
"album" => $album,
"form" => $form
);
return new ViewModel($data);
}
アーティストが文字列ではなくアーティスト エンティティである場合、この例をどのように変更する必要がありますか?
また、アルバムに複数のトラック エンティティもある場合、それらはどのように処理されるでしょうか?