У меня есть одна статья и еще несколько комментариев. Я хочу отображать только те комментарии, которые не помечены как «Удаленные». Я пробовал что-то подобное, но знаю, что это неправильно.
{% for comment in article.comments([{delete: false}])|slice(0, 5) %}
// ...
{% endfor %}
Я пытаюсь снять 5 комментариев, которые не помечены как «удаленные». Как мне это сделать?
Попробуйте записать логику фильтрации в новом методе в Article, а затем нарезать эти результаты.
@ JuanI.MoralesPestana ни одной ошибки не было, ничего не изменилось. (Я тоже удалил кеш).




Вы могли бы попробовать
{% for comment in article.comments|slice(0, 5) if not comment.deleted %}
// ...
{% endfor %}
Но я боюсь, что это может привести к менее чем 5 комментариям, потому что перед тестированием он будет сначала нарезать, если комментарий не будет удален.
Вместо этого вы могли бы лучше написать собственный метод в вашем репозитории статей, который доставляет только комментарии, которые не удаляются.
# 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 %}
Я очень ценю вашу поддержку, но я нашел другое решение, и, на мой взгляд, оно выглядит лучше.
В сущности Article я создал новый метод:
public function getAvailableComments()
{
return $this->getComments()->filter(function(Comment $comment) {
return !$comment->isDeleted();
});
}
Эта функция возвращает только не удаленные комментарии. (Источник: https://knpuniversity.com/screencast/collections/easy-collection-filtering)
Примечание: Twig такой же, как в вопросе.
Согласен с тобой @DarkBee, но для чего мне этого достаточно :)
какой результат с этим кодом ??