我有一篇文章和更多评论。我只想显示未标记为'已删除的评论'。 我尝试过类似的东西,但我知道这不正确。
{% for comment in article.comments([{delete: false}])|slice(0, 5) %}
// ...
{% endfor %}
我试图删除5条未标记为“已删除”的评论。我该怎么办?
答案 0 :(得分:1)
你可以尝试
{% for comment in article.comments|slice(0, 5) if not comment.deleted %}
// ...
{% endfor %}
但我担心它可能会导致少于5条评论,因为如果评论未被删除,它会在测试之前先切片。
相反,你最好在articleRepository中编写一个自定义方法,它只提供未删除的注释。
# src/AppBundle/Repository/ArticleRepository.php
namespace AppBundle\Repository;
class ArticleRepository extends \Doctrine\ORM\EntityRepository
{
public function getAllWithoutDeletedComments()
{
return $this->getEntityManager()->createQuery(
'SELECT a FROM AppBundle:Article a
JOIN a.comments c WITH c.deleted=0'
) ->getResult();
}
}
从你的控制器调用它:
$em = $this->getDoctrine()->getManager();
$articles = $em->getRepository('AppBundle:Article')->getAllWithoutDeletedComments();
或者向您的实体添加方法,过滤未删除的评论
public function getActiveComments($limit = 5)
{
$counter = 0;
$activeComments = [];
foreach($this->comments as $comment)
{
if(!$comment->getDeleted())
{
$activeComments[] = $comment;
if(++$counter == $limit)
{
break;
}
}
}
return $activeComments;
}
当然在Twig中称之为:
{% for comment in article.activeComments() %}
// ...
{% endfor %}
答案 1 :(得分:0)
非常感谢您的支持,但是我找到了另一个解决方案,并且我认为它看起来更好。
在Article
实体中,我创建了一个新方法:
public function getAvailableComments()
{
return $this->getComments()->filter(function(Comment $comment) {
return !$comment->isDeleted();
});
}
此函数仅返回未删除的注释。 (来源:https://knpuniversity.com/screencast/collections/easy-collection-filtering)
注意:嫩枝与所讨论的相同。