Зависит от того, как вы получаете новые сообщения. Есть несколько возможностей.
- Вы можете отфильтровать в виде ветки:
Действие:
public function viewPost(Request $request, EntityManager $em): Response
{
$postId = $reqeust->get('id');
$post = $em->getRepository(Post::class)->find($postId);
$newestPosts = $em->getRepository(Post::class)->findAll();
return $this->render('Post/view.html.twig', [
'post' => $post,
'newestPosts' => $newestPosts
]);
}
представление:
{% for newPost in newestPosts if newPost.id != post.id %}
<h2>{{ newPost.title}}</h2>
{% endfor %}
Если вы используете построитель запросов в объекте хранилища, вы можете добавить параметр «exclude»:
Действие:
public function viewPost(Request $request, EntityManager $em): Response
{
$postId = $reqeust->get('id');
$post = $em->getRepository(Post::class)->find($postId);
$newestPosts = $em->getRepository(Post::class)->findNewPosts(7, $postId);
return $this->render('Post/view.html.twig', [
'post' => $post,
'newestPosts' => $newestPosts
]);
}
Репозиторий:
<?php
namespace App\Repository;
use App\Entity\Post;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* ProductRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class PostRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Product::class);
}
public function findNewPosts($days, $postId)
{
$date = new \DateTime();
$date->modify('-'.$days.' day');
$query = $this->createQueryBuilder('p');
return $query->where('p.id <> :requestPost')
->andWhere('p.datetime >= :requestDatetime')
->setParameter('requestProduct', $postId)
->setParameter('requestDatetime', $date);
getQuery()->getResult()
}
}