Doctrine 2 - 如何将SQL ORDER连接表连接到另一个表

时间:2014-08-06 15:20:05

标签: php mysql sql symfony doctrine-orm

我想从数据库新闻和评论表中检索。这些表格正确相关。 问题是我也想要ORDER评论表。一切正常包括订购(使用ASC和DESC)。

PHP代码

$query = $doctrine->getManager()
->createQuery(
      'SELECT news FROM BlogAdminBundle:News news
       JOIN news.comments comments
       WHERE news.id = :id
       AND news.date_active < :date ORDER BY comments.dateAdd DESC'
)->setParameters(array('date' => new \DateTime(), 'id' => $news_id));

$fetched_news = $query->getSingleResult();
return array('fetched_news' => $fetched_news); 

TWIG CODE

{% for comment in fetched_news.comments %}
//displaying data
{% endfor %}

我知道我可以单独检索新闻表和评论表,但想法将其包含在一个请求中是更好的主意。

有人想帮忙吗?:)

1 个答案:

答案 0 :(得分:2)

这可能有用,假设......

新闻实体看起来像这样:

/**
 * News
 *
 * @ORM\Table(name="News")
 * @ORM\Entity()
 */
class News {
...
    /**
     * @ORM\OneToMany(targetEntity="comment", mappedBy="news", cascade={"persist", "remove"})
     * @ORM\OrderBy({"dateAdd" = "DESC"})
     */
    protected $comments;
...
}

控制器包含$news = $em->getRepository("YourBundle:News")->find($id);

模板包括(假设新闻实体中名为item的列和注释实体中名为comment的列:

{% for event in news %}
    {{ event.item }}
    {% for piece in event.comments %}
        {{ piece.comment }}
    {% endfor %}
{% endfor %}