2014-06-23 82 views
0

如果任何学说的专家,如果能帮助白衣这一点:学说2加入一对多

有一个表,[menu]

它看起来像

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

有一个表[pages]

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

,所以我想用这个学说两个表映射什么我至今

在菜单实体

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

,并在页面实体

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

现在所有的页面都在ArrayCollection的店在菜单被称为$页面

一切工作正常,当我得到

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

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

我可以看到有关所选节点的所有页面都在那里,但我的目标是比较有,如一些关系OneToOne我想有只与由下式给出LANGUAGE_ID节点一个页面,但我不知道该怎么去做吧。我想知道如果有一种方式让一些WHERE子句中的页的实体,但我所有的尝试都没有成功,所以如果有人能帮助将是巨大的LANGUAGE_ID。提前致谢!

回答

0

整天挖我发现我不知道,如果是一个很好的,但似乎在上班的路上经过。

我在菜单实体创建一个方法

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

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

这样我就可以通过语言

获取页面