简体   繁体   中英

How to get DQL result from the template with symfony 1.4?

I'm working with symfony 1.4 and Doctrine. I'm writing an app about some pubs/bars, and I've got 4 tables:

  • products
  • orders
  • product_order
  • pubs.

I want to get the times all products have been ordered in the first pub (ie pubs.id = 1). This is what I've got, but I can only get the sum of the first product (products.id = 1) and I need the sum of all of them, in this case there are two different products in my db.

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();
}

Here my action class:

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

And here my template:

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


      }

Please need help :)

I think there's nothing wrong with your query, but you should have a look at how you display your results.

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

Firstly, you're always referring to the first element in the $resultCount array. Secondly, I'm not sure if you can use a getter for a virtual column (you're not using a column which is mapped to your model.

So I would go with something like this:

  1. In the ordersGetCount I would use

     return $q->fetchArray(); 

    This will return an array of arrays, not an array of objects, and will allow you to access the virtual column units .

  2. To display the results:

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

EDIT:

This is quite strange ;) Can you try to build the query this way: (in theory it should be the same):

 $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');

You must try remove

->groupBy('l.id_product')

it reduces you results to one product.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM