use*_*971 5 php doctrine symfony-1.4
我正在使用symfony 1.4和Doctrine.我正在写一个关于一些酒吧/酒吧的应用程序,我有4个表:
我希望在第一个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();
}
Run Code Online (Sandbox Code Playgroud)
这是我的动作类:
$this->resultCount= Doctrine_Core::getTable('productorder')->ordersGetCount();
Run Code Online (Sandbox Code Playgroud)
在这里我的模板:
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>";
}
Run Code Online (Sandbox Code Playgroud)
请帮忙:)
我认为您的查询没有任何问题,但您应该看看如何显示结果。
echo "<td>".$resultCount[0]->getUnits()[$i]."</td>";
Run Code Online (Sandbox Code Playgroud)
首先,您始终引用$resultCount数组中的第一个元素。其次,我不确定您是否可以对虚拟列使用吸气剂(您没有使用映射到模型的列。
所以我会选择这样的东西:
在ordersGetCount我会使用
return $q->fetchArray();
Run Code Online (Sandbox Code Playgroud)
这将返回一个数组的数组,而不是一个对象的数组,并且允许您访问虚拟列units。
显示结果:
<?php foreach ($resultCount as $row): ?>
<tr>
<td>
<?php echo $row['units']; ?>
</td>
<td>1</td>
<td>1</td>
</tr>
<?php endforeach ?>
Run Code Online (Sandbox Code Playgroud)编辑:
这很奇怪;)您可以尝试以这种方式构建查询吗:(理论上应该是相同的):
$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');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |