>我正在尝试将实体与现实一起使用。
我有一个实体页面和另一篇文章。一个页面可以包含多篇文章,但一篇文章只针对一个页面。
我的页面实体
namespace theatreBundleEntity;
use DoctrineORMMapping as ORM;
/**
* pages
*
* @ORMTable()
* @ORMEntity(repositoryClass="theatreBundleEntitypagesRepository")
*/
class pages
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="nom", type="string", length=255)
*/
private $nom;
//getters and setters
我的文章实体:
<?php
namespace theatreBundleEntity;
use DoctrineORMMapping as ORM;
/**
* article
*
* @ORMTable()
* @ORMEntity(repositoryClass="theatreBundleEntityarticleRepository")
*/
class article {
/**
* @ORMManyToOne(targetEntity="theatreBundleEntitypages")
*/
private $pages;
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="titre", type="string", length=255)
*/
private $titre;
/**
* @var string
*
* @ORMColumn(name="description", type="string", length=255)
*/
private $description;
/**
* @var string
*
* @ORMColumn(name="contenu", type="text")
*/
private $contenu;
/**
* @var DateTime
*
* @ORMColumn(name="date", type="datetime")
*/
private $date;
//getters and setters
我现在想把所有的文章都写成 1 页。我有一个变量$page,其中包含 $nom 属性。
我创建一个
$articles = $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:article')
->findOneBy(array('nom'=> $page));
但nom并不存在。有人知道该怎么做吗?我敢肯定这很简单...
此致敬意
编辑:
这可以这样工作:
$id = $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:pages')
->findOneBy(array('nom'=> $page));
$articles = $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:article')
->findOneBy(array('pages'=> $id));
但是,我为什么要创建多对一的关系?
它很简单,只需定义页面实体中文章的映射
use DoctrineCommonCollectionsArrayCollection;
class pages
{
/**
* @ORMOneToMany(targetEntity="article", mappedBy="pages")
*/
protected $articles;
public function __construct()
{
$this->articles= new ArrayCollection();
}
public function getArticles()
{
return $this->articles;
}
}
现在你可以通过nom获取你的页面,页面的结果对象将有一个相关文章的集合
$page= $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:pages')
->findOneBy(array('nom'=> $page));
$page->getArticles(); /* All articles related to the queried page*/
Reference