Symfony 2 - 在相关实体中对值结果求和的最佳方法

时间:2015-06-06 09:00:19

标签: php symfony doctrine

我的代码旨在从数据库中获取项目。这些项目可能具有借方值或贷方价值。在模板中,我提供了所有值,但也希望提供有关与帐户关联的借方和帐户值之和的信息($ account_id)

如何做到这一点最佳做法是什么?

我应该只运行另外两个SQL查询: 首先是SUM(值),其中accountdebet ='。$ account_id secound to SUM(value)其中accountcredit ='。$ account_id?

这是正确的做法吗?

Controller:
    // Get items for acccount and paginate
            $rp_items = $this->getDoctrine()->getManager()->getRepository('AppBundle:Items');
            $query = $rp_items->createQueryBuilder('p')
            ->where('p.accountdebet = '.$account_id)
            ->orWhere('p.accountcredit = '.$account_id)
            ->getQuery();
            $rp_paginator  = $this->get('knp_paginator');
            $db_pagination = $rp_paginator->paginate($query,$this->get('request')->query->getInt('page', 1),10);
            // Render TPL
            return $this->render('AppBundle:Accounts:items.html.twig', array('pagination' => $db_pagination, 'account' => $account));

在树枝上:

 {% extends '::base.html.twig' %}

 {% block body %}
     <B>Item list for account {{ account.id }} </B><BR>

Account id: {{ account.id }}<BR>
Account marker: {{ account.marker }}<BR>
Account name: {{ account.name }}<BR>

<table class="table table-striped">
<tr>
{# sorting of properties based on query components #}
    <th>{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}</th>
    <th{% if pagination.isSorted('a.itemdate') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Date', 'a.itemdate') }}</th>
    <th>Document</th>
    <th>{{ knp_pagination_sortable(pagination, 'Marker', 'a.marker') }}</th>
    <th>Debit</th>
    <th>Credit</th>
</tr>

{# table body #}
{% for item in pagination %}
<tr>
    <td>{{ item.id }}</td>
    <TD>{{ item.itemdate|date('Y-m-d')}}</TD>
    <td><A HREF="{{url('app_documents_details', {'id': item.documentid.id})}}">{{ item.documentid.marker }}</A></td>
    <td>{{ item.marker }}</td>

    <TD>{% if item.accountdebet.id == account.id %}
    {{ item.itemvalue}}
    {% endif %}
    </TD>
    <TD>{% if item.accountcredit.id == account.id %}
    {{ item.itemvalue}}
    {% endif %}</TD>
</tr>
{% endfor %}
</table>
{# display navigation #}
<div class="pagination">
    {{ knp_pagination_render(pagination) }}
</div>
 {% endblock %}

1 个答案:

答案 0 :(得分:1)

你可以通过多种方式解决它,但我喜欢创建一个父实体,例如ItemsCollection,它包含一个ItemsCollection项。然后我给新实体一些额外的功能,例如。

public function countItemValues() 
{
   $total = 0;

   foreach($this->items as $item)
   {
       $total += $item->getValue();
   }

   return $total;
}