从Symfony控制器中的两个实体合并和排序结果

时间:2013-12-07 14:18:11

标签: symfony merge entities

我想获得两个实体之间最近的十个条目(帖子,新闻)。

在我的控制器中:

$posts = $em->getRepository('AcmePostBundle:Post')->getTenLatest();

$news = $em->getRepository('AcmeNewsBundle:News')->getTenLatest();

如何合并这两个结果?类似的东西:

$latest = $posts->merge($news);

然后,按日期字段排序,限制10?

2 个答案:

答案 0 :(得分:1)

我能够比较帖子和新闻的日期,并将最新版本添加到新阵列中。然后将新数组发送到rss feed包。

$news = $em->getRepository('ACMENewsBundle:News')->getLatest();

$posts = $em->getRepository('ACMEPostsBundle:Posts')->getLatest();

$latest = [];
$latest_news = 0;
$latest_post = 0;

for ($i = 0; $i < 7; $i++) {
    if ($news[$latest_news]->getUpdated() > $posts[$latest_article]->getUpdated()) {
            $latest[$i] = $lessons[$latest_news];
            $latest_news++;
        } else {
            $latest[$i] = $posts[$latest_post];
            $latest_post++;
        }
    }

    $feed = $this->get('eko_feed.feed.manager')->get('article');
    $feed->addFromArray($latest);

    return new Response($feed->render('rss'));

答案 1 :(得分:0)

你没有。因为它们是两个不同的实体。

将它们传递给模板渲染器(默认树枝)

array('news'=> $news, 'posts' => $posts)

如果不使用@Template()

return $this->render('AcmeBlogBundle:Blog:index.twig',array('news'=> $news, 'posts' => $posts));

如果使用@Template()

return array('news'=> $news, 'posts' => $posts);

您可以使用{{ news.fieldname }}{{ posts.fieldname }}

访问它们