多对一关系,按属性获取结果



>我正在尝试将实体与现实一起使用。

我有一个实体页面和另一篇文章。一个页面可以包含多篇文章,但一篇文章只针对一个页面。

我的页面实体

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

相关内容

  • 没有找到相关文章

最新更新