Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [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

Reply #1 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

Reply #2 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>
 
Page
  1. dao groupby et selectfirst