Symfony 多对一关系,通过属性获得结果
我正在尝试将实体与不动产一起使用 我有一个实体页面和另一个实体页面。一个页面可以有多篇文章,但一篇文章只针对一个页面 我的页面实体Symfony 多对一关系,通过属性获得结果,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在尝试将实体与不动产一起使用 我有一个实体页面和另一个实体页面。一个页面可以有多篇文章,但一篇文章只针对一个页面 我的页面实体 namespace theatreBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * pages * * @ORM\Table() * @ORM\Entity(repositoryClass="theatreBundle\Entity\pagesRepository") */ class page
namespace theatreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* pages
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="theatreBundle\Entity\pagesRepository")
*/
class pages
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
//getters and setters
我的文章实体:
<?php
namespace theatreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* article
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="theatreBundle\Entity\articleRepository")
*/
class article {
/**
* @ORM\ManyToOne(targetEntity="theatreBundle\Entity\pages")
*/
private $pages;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="titre", type="string", length=255)
*/
private $titre;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255)
*/
private $description;
/**
* @var string
*
* @ORM\Column(name="contenu", type="text")
*/
private $contenu;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
//getters and setters
但nom并不存在。有人知道怎么做吗?我相信这很简单
致意
编辑:
这可以做到:
$id = $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:pages')
->findOneBy(array('nom'=> $page));
$articles = $this
->getDoctrine()
->getManager()
->getRepository('theatreBundle:article')
->findOneBy(array('pages'=> $id));
但是,为什么我要创建多对一关系呢?这是一个简单的关系,只需定义页面实体中文章的映射即可
namespace theatreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* pages
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="theatreBundle\Entity\pagesRepository")
*/
class pages
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
//getters and setters
use Doctrine\Common\Collections\ArrayCollection;
class pages
{
/**
* @ORM\OneToMany(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*/
@anubis是的,您需要一个双向实体。我必须始终创建双向实体吗?有什么区别吗?@anubis这取决于你让我们使用你的场景如果你只需要文章和它对应的页面,那么你不需要在你的页面实体中定义一个映射,但是现在你有了一个场景来获取你所选页面的所有文章,那么你需要这个映射,因为它比有一个querybuilder更方便,我猜它是更好的做法是按照以下官方文档进行双向映射