2014-06-23 3 views
0

onetomany 조인 테이블 [pages]교리 2

id | page_id | language_id | title | 
1  1  1   LANG1 
2  1  2   LANG2 

id | parent | lft | rgh | level | page_id 
1  0 1  2  0  1 

처럼 보이는 테이블이

, [menu]

그래서이 두 테이블을 doctrine과 매핑하고 싶습니다. 지금까지

/** 
* @ORM\ManyToOne(targetEntity="Entity\Menu", inversedBy="pages") 
* @ORM\JoinColumns({ 
*  @ORM\JoinColumn(name="page_id", referencedColumnName="page_id") 
* }) 
**/ 
private $page_id; 

이제 모든 페이지가

모든 $ 페이지

이라고 메뉴에있는 ArrayCollection에 저장되어 메뉴 엔티티

/** 
* @ORM\OneToMany(targetEntity="Entity\Page", mappedBy="page_id", fetch="LAZY") 
**/ 
private $pages; 

과 페이지 엔티티에

입니다 않았다 잘 때 작동합니다.

$repo = $em->getRepository('Entity\Menu'); 
$node = $repo->findOneById(1); 

//this returns $pages var 
$page = $node->getPages()->toArray(); 
var_dump($page); 

내가 선택한 노드와 관련된 모든 페이지가 있음을 알 수 있지만, 내 목표는 관계로 뭔가를 가지고 있습니다. OneToOne 주어진 language_id로 노드와 관련된 페이지를 하나만 갖고 싶습니다. 그것을하기 위해. 나는 page 엔티티에서 where_clause를 language_id에 부여하는 방법이 있는지 궁금 해서요. 그러나 누군가 내게 도움이 될 수 있다면 성공하지 못한다. 미리 감사드립니다!

답변

0

하루 종일 파고가 잘 모르겠지만 내가 잘 모르겠지만 작동하는 것 같습니다.

나는

public function getPageByLanguageId($language_id) 
{ 
    $criteria = Criteria::create(); 
    $criteria->where(Criteria::expr()->eq('language', $language_id)); 

    return $this->pages->matching($criteria); 
} 

그래서 난 언어

하여 페이지를 얻을 수 있습니다 내 메뉴 엔티티의 방법을 만들어