Od niedawna używam propel'a i jeszcze nie do końca orientuje się w jego możliwościach. Chciałbym wiedzieć czy jest możliwość przerobienia poniższego zapytania tak by w propelu uzyskać obiekty. Przerobić Peer klasy?
  1. SELECT drop_rate.MIN,
  2. drop_rate.MAX,
  3. (@CHANCE:=IF((((drop_rate.ITEM_CHANCE*4)*(drop_rate.GROUP_CHANCE*4))/100 > 100), 100, (drop_rate.ITEM_CHANCE*4)*(drop_rate.GROUP_CHANCE*4))/100)) AS PERC,
  4. itemdata.CLIENT_NAME,
  5. CEIL(1/(@CHANCE/100)) AS FRAC
  6. FROM drop_rate, itemdata WHERE drop_rate.NPC_ID=43 AND itemdata.id=drop_rate.ITEM_ID


Wiem, że mogę wykonać kożystajac z propela taka kwerendę ale uzyskam wtedy result set nie obiekty ( tylko, czy da się jakoś inaczej ? )

Z góry dziękuję za pomoc

Edit:

Na kanale #symfony powiedziano mi, że takie rzeczy tylko w erze i propel tego nie potrafi. Co najwyżej żeby otrzymać obiekty można postąpić tak.
  1. <?php
  2. $query = "
  3. SELECT 
  4. itemdata.ID AS id,
  5. drop_rate.MIN AS min, 
  6. drop_rate.MAX AS max,
  7. (@CHANCE:=IF((((drop_rate.ITEM_CHANCE*1)*(drop_rate.GROUP_CHANCE*1))/100 > 100), 100, ((drop_rate.ITEM_CHANCE*1)*(drop_rate.GROUP_CHANCE*1))/100)) as PERC,
  8. itemdata.CLIENT_NAME AS client_name,
  9. CEIL(1/(@CHANCE/100)) as frac
  10. FROM 
  11. drop_rate, 
  12. itemdata 
  13. WHERE 
  14. drop_rate.NPC_ID = 43 
  15. AND 
  16. itemdata.id = drop_rate.ITEM_ID
  17. ";
  18.  
  19. $connection = Propel::getConnection();
  20. $statement = $connection->prepareStatement($query);
  21. $result = $statement->executeQuery();
  22.  
  23. $items = array();
  24.  
  25. while ($result->next())
  26. {
  27. $id = $result->getInt('id');
  28.  
  29. $item = ItemdataPeer::retrieveByPk($id);
  30.  
  31. if ($item instanceof Itemdata)
  32. {
  33. $items[] = $item;
  34. }
  35. }
  36. ?>


Niestety generuje to tyle zapytań ile otrzymamy rezultatów a i do FRAC i PERC nie ma dostępu przez get ( trzeba dopisać coś w klasach bazowych? ) Co prawda można to zminimalizować do 2 zapytań przez retriveByPK(array()) ale chyba jednak daruje sobie w tym przypadku obiekty. To tak gdyby ktoś w przyszłości miał taki problem winksmiley.jpg

Edit:

Da się jednak normalnie. Dodając warunek do criteria można tam wstawić dowolne wyrażenie czyli również warunki. Do wyciągnięcia obiektów służy metoda hydrate.