- 1
[Opened] dao groupby et selectfirst
Posted by chris on 01/29/2008 19:17
Je viens de migrer mon appli en 1.0.1 et j'ai la surprise de voir que je ne peux plus utiliser groupby avec une méthode selectfirst de dao. Il y a une raison à cela ?
Je pourrais toujours utiliser un select avec un limit 0,1, mais du coup c'est une liste d'enregistrements que je vais recevoir et plus l'enregistrement lui-même. Je trouve que c'est alourdir inutilement mon code dans ces conditions.
[Opened] Re: dao groupby et selectfirst
Posted by laurentj on 01/29/2008 23:30
j'ai la surprise de voir que je ne peux plus utiliser groupby avec une méthode selectfirst de dao
C'est à dire ? c'est toujours utile d'indiquer le code qui a provoqué l'erreur :-p En clair, c'est quoi ta méthode ?
[Opened] Re: dao groupby et selectfirst
Posted by chris on 01/31/2008 15:04
Et bien ce n'est pas bien compliqué :
<method name="findCardById" groupby="item_name" type="select"> <parameter name="card" /> <conditions> <eq property="id" expr="$card" /> </conditions> </method>
est autorisé, alors que le même en type selectfirst, ne l'est pas :
l'attribut "groupby" n'est pas autorisé dans ce context sur la balise
"<method name="findCardById"" (fichier
/var/www/jelix/optiactifdev/modules/public/daos/panier_article.dao.xml)
/var/www/jelix/lib/jelix/dao/jDaoMethod.class.php 139
Et il me semble bien voir dans jDaoMethod.class.php que seul "select" est pris en compte :
if(strlen($params['groupby'])){ if($this->type == 'select'){ $this->_groupBy = preg_split("/[\s,]+/", $params['groupby']); $props = $this->_def->getProperties(); foreach($this->_groupBy as $p){ if (!isset ($props[$p])) { throw new jDaoXmlException ('method.property.unknown', array($this->name, $p)); } } }else{ throw new jDaoXmlException ('forbidden.attr.context', array('groupby', '<method name="'.$this->name.'"')); } }
J'avais espéré pouvoir enfin remplacer mon (inutilement) lourd :
<method name="findCardById" type="php"> <parameter name="card" /> <body><![CDATA[ $sql = $this->_selectClause.$this->_fromClause.$this->_whereClause; $sql .= ($this->_whereClause == ''?' WHERE ':' AND '); $sql .= " commande.id = '".$card."'"; $sql .= ' GROUP BY item_name'; $rs = $this->_conn->query($sql); $rs->setFetchMode(8,$this->_DaoRecordClassName); $record = $rs->fetch(); return $record; ]]></body> </method>
- 1