关于如何检索作为一个对象的连接entites的文档非常稀疏,并且关于该主题的大多数Stack Overflow问题已经存在很多年了。
我有一个symfony项目,并在Doctrine中完全映射数据库模式。在我的控制器中,我能够一个接一个地运行这两个查询,它们工作正常。
$page = $this->getDoctrine()
->getRepository('PageBundle:SitePages')
->findByprodpageid($id);
$matrices = $this->getDoctrine()
->getRepository('PageBundle:SiteMatrices')
->findByprodpageid($id);
但是它们都包含属性prodpageid,我想加入这个列上的两个实体,并接收一个包含两个表中所有列值的对象。
我在现有的数据库结构之上构建它,所以与更改数据库结构等无关,这是不可能的。
我在我的实体中添加了注释,以指定在ManyToOne关系中应该连接哪些列。但是,如何激活该关系并接收连接对象?
感谢有关此主题的任何信息。
编辑:这是我与实体的关系
//实体/ SITEPAGES
/**
* @var integer
*
* @ORM\Column(name="ProdPageID", type="smallint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @ORM\OneToMany(targetEntity="SiteMatrices")
* @ORM\JoinColumn(name="prodpageid", referencedColumnName="prodpageid")
*/
private $prodpageid;
//实体/ SiteMatrices
/**
* @var integer
*
* @ORM\Column(name="ProdPageID", type="smallint", nullable=false)
* @ORM\ManyToOne(targetEntity="SitePages")
* @ORM\JoinColumn(name="prodpageid", referencedColumnName="prodpageid")
*
*/
private $prodpageid;
答案 0 :(得分:3)
您说Page
有很多Matrices
。我将根据您对绘图注释的许可进行一些更改:
/**
* Entities/SitePages
*
* @var integer
*
* @ORM\Column(name="ProdPageID", type="smallint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @ORM\OneToMany(targetEntity="SiteMatrices")
* @ORM\JoinColumn(name="prodpageid", referencedColumnName="prodpageid")
*/
private $matrices;
/**
* @return ArrayCollection
*/
public function getMatrices(){
return $this->matrices;
}
/**
* @param Entities/SiteMatrices[]
* @return $this
*/
public function setMatrices($matrices){
$this->matrices = $matrices;
return $this;
}
和
/**
* Entities/SiteMatrices
*
* @var integer
*
* @ORM\Column(name="ProdPageID", type="smallint", nullable=false)
* @ORM\ManyToOne(targetEntity="SitePages")
* @ORM\JoinColumn(name="prodpageid", referencedColumnName="prodpageid")
*
*/
private $page;
/**
* @return Entities/SitePages
*/
public function getPage(){
return $this->page;
}
/**
* @param Entities/SitePages
* @return $this
*/
public function setPage($page){
$this->page = $page;
return $this;
}
现在,如果您使用此DQL查询页面:
$pages = $this->getDoctrine()
->getRepository('PageBundle:SitePages')
->findByprodpageid($id);
然后你可以通过遍历矩阵关联来获得每个页面的矩阵:
foreach($pages as $page){
$matrices = $page->getMatrices(); // will give you an ArrayCollection of all matrices objects joined by prodpageid to this page.
}
希望我没有弄错你的帮助。