مرشح غصين OneToMany

0

لدي مقال واحد والمزيد من التعليقات. أريد عرض التعليقات التي لم يتم وضع علامة "محذوفة" فقط. لقد جربت شيئًا من هذا القبيل ، لكنني أعلم أن هذا ليس صحيحًا.

{% for comment in article.comments([{delete: false}])|slice(0, 5) %}
    // ...
{% endfor %}

أحاول أخذ 5 تعليقات لم يتم وضع علامة "محذوف" عليها. كيف يمكنني فعل ذلك؟

2 الاجابة

1
افضل جواب

بامكانك ان تحاول

{% 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 %}
:مؤلف
0

أنا أقدر دعمك حقًا ، لكني وجدت حلاً آخر ، وفي رأيي يبدو أفضل.

في ال Article كيان قمت بإنشاء طريقة جديدة:

public function getAvailableComments()
{
    return $this->getComments()->filter(function(Comment $comment) {
        return !$comment->isDeleted();
    });
}

تُرجع هذه الوظيفة التعليقات غير المحذوفة فقط. (المصدر: https://knpuniversity.com/screencast/collections/easy-collection-filtering )

ملاحظة: غصين هو نفسه في السؤال.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام