2014-06-23 116 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); 
} 

這樣我就可以通過語言

獲取頁面