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更方便,我猜它是更好的做法是按照以下官方文档进行双向映射