在类别中显示上一篇文章

时间:2015-10-25 10:23:02

标签: symfony doctrine-orm

我只是编辑主题详情。

我目前正在开发一个由4个实体组成的论坛: - 包括几个论坛的类别 - 论坛汇集了几个主题 - 主题包括几个帖子 - 包含主题答案的帖子

现在一切正常,但有一点是我无法实现的查询。

我想在论坛的主页上与子论坛的所有类别允许快速导航。 我遇到的问题是我无法检索为每个论坛执行的post dernirer,我想知道如何解决这个问题?

所以我想显示与所有这些论坛相关联的所有类别,并在实体中发布最后一篇帖子,以便每个论坛的LastPost主题。

以下是我要做的事情的概述:http://hpics.li/029d17b

我的存储库:

public function findAllCategory()
{
    $qb = $this->createQueryBuilder('c')
        ->leftJoin('c.forum', 'f')
        ->addSelect('f')
        ->leftJoin('f.topic', 't')
        ->addSelect('t')
        ->orderBy('c.id', 'DESC');

    return $qb->getQuery()
        ->getResult();
}

我的控制器:

$categorys  = $em->getRepository('AppBundle:Category')->findAllCategory();

这是我的枝条文件:

{% for category in categorys %}
    <div>
        <div class="row">
            <div class="col-md-12"><h2>{{ category.title }}</h2></div>
        </div>

        <div class="row">
            {% for forum in category.forum %}
                <div class="col-md-4">
                    <h3><a href="{{ path('forum_rubric', { 'slug': forum.slug }) }}">{{ forum.title }}</a></h3>
                    {{ forum.description }}

                    Last Post :<br/>
                    {% if forum.lastPost is not empty %}
                        <a href="{{ path('forum_topic_show', { 'slug': forum.topic.slug }) }}#message-{{ forum.lastPost.id }}">{{ forum.topic.title }}</a>
                    {% endif %}
                </div>
            {% endfor %}
        </div>
    </div>
{% endfor %}

我的实体:

class Category
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Forum", mappedBy="category")
     * @ORM\JoinColumn(nullable=true)
     */
    private $forum;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @Gedmo\Slug(fields={"title", "id"})
     * @ORM\Column(length=128, unique=true)
     */
    private $slug;
}


class Forum
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="forum")
     * @ORM\JoinColumn(nullable=false)
     */
    private $category;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Topic", mappedBy="forum")
     * @ORM\JoinColumn(nullable=true)
     */
    private $topic;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @Gedmo\Slug(fields={"title", "id"})
     * @ORM\Column(length=128, unique=true)
     */
    private $slug;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255)
     */
    private $description;

    /**
     * @ORM\OneToOne(targetEntity="AppBundle\Entity\Post")
     * @ORM\JoinColumn(nullable=true)
     */
    private $lastPost;
}


class Topic
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", inversedBy="topic")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Forum", inversedBy="topic")
     * @ORM\JoinColumn(nullable=false)
     */
    private $forum;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Post", mappedBy="topic")
     * @ORM\JoinColumn(nullable=true)
     */
    private $post;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @Gedmo\Slug(fields={"title", "id"})
     * @ORM\Column(length=128, unique=true)
     */
    private $slug;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * @ORM\OneToOne(targetEntity="AppBundle\Entity\Post")
     * @ORM\JoinColumn(nullable=true)
     */
    private $lastPost;
}


class Post
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", inversedBy="post")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Topic", inversedBy="post")
     * @ORM\JoinColumn(nullable=false)
     */
    private $topic;

    /**
     * @var string
     *
     * @ORM\Column(name="message", type="text")
     */
    private $message;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;
}

谢谢!

0 个答案:

没有答案