如何使用symfony 1.4从模板中获取DQL结果?

时间:2013-05-30 15:18:01

标签: php doctrine symfony-1.4

我正在使用symfony 1.4和Doctrine。我正在写一个关于一些酒吧/酒吧的应用程序,我有4个表:

  • 产品
  • 订单
  • product_order
  • 酒馆。

我希望在第一个pub中订购所有产品(即pubs.id = 1)。这就是我所拥有的,但我只能获得第一个产品的总和(products.id = 1),我需要所有这些产品的总和,在这种情况下,我的数据库中有两个不同的产品。

ProductOrderTable:

public function ordersGetCount(){

    $q = Doctrine_Query::create()

      ->from('ProductOrder l')
      ->innerJoin('l.Order p ON l.id_order = p.id')
      ->select('SUM(l.amount) as units')
      ->andWhere('p.id_pub = 1')
      ->groupBy('l.id_product')
      ->orderBy('p.id');
   return $q->execute();
}

这是我的动作类:

$this->resultCount= Doctrine_Core::getTable('productorder')->ordersGetCount();

这是我的模板:

 for($i=0; $i<2; $i++){

          echo "<tr>";

          echo  "<td>".$resultCount[0]->getUnits()[$i]."</td>";//   
          echo  "<td>1</td>";
          echo  "<td>1</td>";
          echo "</tr>";


      }

请帮助:)

2 个答案:

答案 0 :(得分:1)

我认为您的查询没有任何问题,但您应该看看如何显示结果。

echo  "<td>".$resultCount[0]->getUnits()[$i]."</td>";

首先,您总是指代$resultCount数组中的第一个元素。其次,我不确定你是否可以使用getter作为虚拟列(你没有使用映射到你的模型的列。

所以我会选择这样的东西:

  1. ordersGetCount我会使用

    return $q->fetchArray();
    

    这将返回一个数组数组,而不是一个对象数组,并允许您访问虚拟列units

  2. 显示结果:

    <?php foreach ($resultCount as $row): ?>
        <tr>
            <td>
                <?php echo $row['units']; ?>
            </td>   
            <td>1</td>
            <td>1</td>
        </tr>
    <?php endforeach ?>
    
  3. 编辑:

    这很奇怪;)你能尝试以这种方式构建查询:(理论上它应该是相同的):

     $q = $this->createQuery('l')
         ->select('l.id_product, sum(l.amount) as units')
         ->innerJoin('l.Order')
         ->where('p.id_pub = 1')
         ->groupBy('l.id_product')
         ->orderBy('p.id');
    

答案 1 :(得分:0)

您必须尝试删除

->groupBy('l.id_product')

它会将您的结果减少到一个产品。