2013-12-07 1 views
0

Я хотел бы получить десять последних записей между двумя объектами (почта, новости).Объединить и отсортировать результаты двух объектов в контроллере Symfony

В моем контроллере:

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

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

Как объединить два результата? Что-то вроде:

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

А после этого, упорядочить их по дате, ограничить 10?

+0

@ jamie0726 Как-то это не работало для меня. – hipnosis

ответ

1

Мне удалось сравнить даты сообщений и новостей и добавить новейшие в новый массив. Затем отправьте новый массив в комплект поставки rss.

$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')); 
0

У вас нет. Потому что они 2 разных сущности.

Вы передаете их в шаблон визуализатора (по умолчанию прута), как

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 }}

+0

Twig было бы легко. Проблема в том, что я выводил этот результат в комплект поставки RSS, а не Twig. Думаю, мне придется написать некоторую логику сравнения между этими двумя результатами, чтобы объединить их? – hipnosis

 Смежные вопросы

  • Нет связанных вопросов^_^