如何与Doctrine的连接表相加

时间:2013-05-22 08:24:28

标签: symfony doctrine-orm twig

我有2个相关实体 - 类别和费用。费用有一个日期 - 费用的时候。

类别实体与多个费用实体具有一对多的关系,这些实体本身具有名称(产品)和价格属性。

我想计算当前月份的单个类别的所有费用 - >价格属性的总和。 (我有工作的findExpensesForMonthAndCategory方法)

你能帮我吗?

分类

class Category
{
    protected $name;
    protected $expenses;

    public function __construct()
    {
        $this->expenses = new ArrayCollection();
    }
}

费用

class Expense
{
    protected $category;
    protected $product;
    protected $price;
    protected $date;
}

1 个答案:

答案 0 :(得分:4)

实际上有两种解决方法。

解决方案1 ​​

将getExpenseSum()方法添加到Category实体...

class Category 
{

// ...

    public function getExpenseSum() 
    {    
        $sum = 0;
        foreach ($this->expenses as $expense) {
            $sum += $expense->getPrice();
        }

        return $sum;
     }

现在你可以用这种方式输出总和:

     {{ category.expenseSum }}

解决方案2

在您的存储库中创建一个方法。

// src/Vendor/YourBundle/Entity/ExpenseRepository 

public function getSumByCategory($category)
{
    $q = $this->createQueryBuilder('e')
        ->sum('e.price')
        ->where('e.category = :category')
        ->setParameter('category', $category)
        ->getQuery();

    return $q->getResult();
}