5

私は symfony 1.4 と Doctrine を使用しています。私はいくつかのパブ/バーに関するアプリを書いています.4つのテーブルがあります:

  • 製品
  • 注文
  • product_order
  • パブ。

最初のパブ (つまり、pubs.id = 1) ですべての製品が注文された時間を取得したいと考えています。これは私が持っているものですが、最初の製品 (products.id = 1) の合計しか取得できず、それらすべての合計が必要です。この場合、私のデータベースには 2 つの異なる製品があります。

製品注文テーブル:

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>";


      }

助けが必要です:)

4

2 に答える 2

1

クエリに問題はないと思いますが、結果の表示方法を確認する必要があります。

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

まず、常に$resultCount配列の最初の要素を参照しています。次に、仮想列にゲッターを使用できるかどうかわかりません (モデルにマップされた列を使用していません。

だから私はこのようなものに行きます:

  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 ?>
    

編集:

これはかなり奇妙です ;) この方法でクエリを作成してみてください: (理論的には同じはずです):

 $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');
于 2013-06-03T13:10:23.423 に答える
0

削除を試みる必要があります

->groupBy('l.id_product')

結果を1つの製品に減らします。

于 2013-06-01T13:06:47.783 に答える