2012-09-14 2 views
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 메소드를 넣는 것이 좋습니다.

답변

2

정의에 따라 엔티티 객체에서 저장소 클래스의 메소드를 호출 할 수 없습니다 ... 이것은 기본 객체 지향 프로그래밍입니다. 캐스케이드가 올바르게 구성되어있는 경우,이

작동합니다

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(); 

을 수행

나는 당신이 Category 기업에 대한 addArticle 기능 같은 것을 만들해야한다고 생각

+0

그래서 저장소는 설정/추가 방법을 보유하는 데 사용됩니까? 아니면 그들은 단지 방법을 얻는 데 좋은가? –

0

자신 만의 저장소 관리자를 작성하고 필요에 맞는 방법을 만들 수 있습니다.

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

+0

이것은 정확하게 예제에서 수행 한 것입니다 :) 질문은 저장소에서 메소드를 설정/추가하는 것에 관한 것입니다. 그리고 그것을하는 제일 방법. –

+1

리포지토리의 코드는 새 개체를 만들지 않아야하며 엔터티 만 조작하면 안됩니다. 귀하의 코드는 컨트롤러에 두는 것이 더 좋습니다 – Maks3w

+0

답변 해 주셔서 감사합니다. 이것이 제가 알고 싶었던 것입니다. –