如果任何学说专家能帮助解决这个问题:
有一张表[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;
现在所有页面都存储在Menu中的arraycollection中,称为$ 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实体中为language_id提供一些where子句,但是我的所有尝试都没有成功,所以如果有人可以提供帮助就会很棒。提前谢谢!
答案 0 :(得分:0)
经过一整天的挖掘后,我找到了一种我不知道是否是一个好的但似乎有用的方式。
我在菜单实体中创建了一个方法
public function getPageByLanguageId($language_id)
{
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq('language', $language_id));
return $this->pages->matching($criteria);
}
所以我可以按语言获取页面