多对一关系,通过属性获得结果

时间:2015-04-11 18:54:26

标签: symfony doctrine-orm

我试图将实体用于实现。

我有一个实体页面和另一篇文章。一个页面可以有多篇文章,但一篇文章仅适用于一页。

我的网页实体     

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

我现在想要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));

但是,为什么我创建了多对一关系?

1 个答案:

答案 0 :(得分:2)

它只是一个简单的定义页面实体中文章的映射

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*/

Reference