2

エンティティでリポジトリメソッドを呼び出すことは可能ですか?私はこのようなものを意味します

$article = $em->getRepository('Entities\Articles')->findOneBy(array('id' => $articleId));
$category = $em->getRepository('Entities\Categories')->findOneBy(array('id' => 86));

$article->addArticleToCategory($category);

addArticleToCategoryがリポジトリ内のメソッドである場合(単なるサンプルコード)

public function addArticleToCategory($category){
    $categoryArticles = new CategoryArticles();
    $categoryArticles->setArticle(!!/** This is where I want to have my variable $article from this method call **/!!);
    $categoryArticles->setCategory($category);
    $this->getEntityManager()->persist($categoryArticles);
    $this->getEntityManager()->flush();
}

それを行うための最良の方法は何ですか?

また、カスタムset / createメソッドをリポジトリに配置するのは良い習慣ですか?

4

2 に答える 2

3

定義上、エンティティオブジェクトからリポジトリクラスのメソッドを呼び出すことはできません...これは基本的なオブジェクト指向プログラミングです。

エンティティに次のようなaddArticle関数を作成する必要があると思います。Category

function addArticle($article)
{
   $this->articles[] = $article;
   $article->setCategory($this);
}

そして、あなたは

$article = $em->getRepository('Entities\Articles')->findOneBy(array('id' => $articleId));
$category = $em->getRepository('Entities\Categories')->findOneBy(array('id' => 86));

$category->addArticle($article);
$em->persist($category);
$em->flush();

カスケードが正しく構成されている場合、これは機能します

于 2012-09-14T09:55:15.170 に答える
0

独自のリポジトリマネージャを作成し、必要に応じてメソッドを作成できます。

http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#custom-repositories

于 2012-09-14T10:35:37.090 に答える