Fork me on GitHub






classGenerator -> méthode insert ne fonctionne pas
Aspirant
Inscrit: 04/02/2003 05:02
De Toulouse, France
Messages: 47
Est-ce que quelqu'un a déjà eu ce soucis avec des classes générées par ce module ?

Là, après 2 jours, j'ai un début de réponse mais je sèche totalement ... en attendant, je passe par une fonction mais j'ai un gros soucis ... toutes mes instances générées avec la méthode get voient la valeur de isNew mise à true.

Du coups, aucun insert ne marche puisque l'insert se fait avec INSERT au lieu de UPDATE et avec numéro d'ID ... déjà existant

Posté le : 03/08/2005 22:39

DB site...
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Semi pro
Inscrit: 06/01/2004 09:37
De Non loin de Paris
Messages: 666
Donne nous un extrait de ta classe sinon on ne pourra pas t'aider.

A+

Posté le : 03/08/2005 23:18
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Aspirant
Inscrit: 04/02/2003 05:02
De Toulouse, France
Messages: 47
Je ne voulais pas le faire de suite vu la taille (je met tout comme ça, c'est fait) :

include_once XOOPS_ROOT_PATH.'/class/xoopsobject.php';

/**
 *     dbv_persons Class
 * 
 *     This class is responsible for providing data access mechanisms to the data source of Xoops dbv_persons class objects.
 * 
 *  @author Vincent Fourastié
 *  @package DB Volley
 *  @version 1.0
 */
class dbv_persons extends XoopsObject

    function 
dbv_persons$id null )
    {
        
$this->db =& Database::getInstance();

        
$this->initVar'persons_id'XOBJ_DTYPE_INTnullfalse10 );
        
$this->initVar'persons_sex'XOBJ_DTYPE_INTnullfalse10 );
        
$this->initVar'persons_surname'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_firstname'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_nicknames'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_country'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_country2'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_birth'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_height'XOBJ_DTYPE_INT,nullfalse10 );
        
$this->initVar'persons_birthwhere'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_picture'XOBJ_DTYPE_TXTBOXnullfalse );
        
$this->initVar'persons_xoopsid'XOBJ_DTYPE_INTnullfalse10 );
        
$this->initVar'persons_occupation'XOBJ_DTYPE_INTnullfalse10 );
        
$this->initVar'persons_lastupdate'XOBJ_DTYPE_TXTBOXnullfalse );

        if ( isset( 
$id ) )
        {
            if ( 
is_array$id ) )
            {
                
$this->assignVars$id );
            }
            else
            {
                
$this->loadintval$id ) );
            }
        }
        else
        {
            
$this->setNew();
        }
    }

    function 
load$id )
    {
        
$sql 'SELECT *
                  FROM '
.$this->db->prefix'dbv_persons' ).'
                 WHERE persons_id = ''.$id.'''
;
        
$myrow $this->db->fetchArray$this->db->query$sql ) );
        
$this->assignVars$myrow );

        if ( !
$myrow )
        {
            
$this->setNew();
        }
    }
[
b][color=CC0000]...[/color][/b]
}

/**
 *     dbv_personshandler Class
 * 
 *     This class provides simple mechanisms for dbv_persons object
 * 
 *  @author Vincent Fourastié
 *  @package DB Volley
 *  @version 1.0
 */
class Xoopsdbv_personsHandler extends XoopsObjectHandler
{
    
/**
    * create
    *  
    * Create a new dbv_persons
    * 
    * @param bool $isNew Flag the new objects as 'new' ?
    * 
    * @return object dbv_persons
    */
    
function &create$isNew true )
    {
        
$dbv_persons = new dbv_persons();

        if ( 
$isNew )
        {
            
$dbv_persons->setNew();
        }

        return 
$dbv_persons;
    }

    
/**
    * get
    * 
    * Retrieve a dbv_persons
    * 
    * @param int $id Id of the dbv_persons
    * 
    * @return mixed reference to the {@link dbv_persons} object, FALSE if failed
    */
    
function &get$id )
    {
        
$sql 'SELECT *
                  FROM '
.$this->db->prefix'dbv_persons' ).'
                 WHERE persons_id = ''.$id.'''
;

        if ( !
$result $this->db->query$sql ) )
        {
            return 
false;
        }

        
$numrows $this->db->getRowsNum$result );

        if ( 
$numrows == )
        {
            
$dbv_persons = new dbv_persons($id);
            
$dbv_persons->assignVars$this->db->fetchArray$result ) );

            return 
$dbv_persons;
        }

        return 
false;
    }

    
/**
    * insert
    * 
    * Insert a new dbv_persons in the database
    * 
    * @param object $dbv_persons reference to the {@link dbv_persons} object
    * @param bool $force
    * 
    * @return bool FALSE if failed, TRUE if already present and unchanged or successful
    */
    
function insert( &$dbv_persons$force false )
    {
        global 
$xoopsConfig;

        if ( 
get_class$dbv_persons ) != 'dbv_persons' )
        {
                return 
false;
        }

        if ( !
$dbv_persons->isDirty() )
        {
                return 
true;
        }

        if ( !
$dbv_persons->cleanVars() )
        {
                return 
false;
        }

        foreach ( 
$dbv_persons->cleanVars as $k => $v )
        {
                ${
$k} = $v;
        }

        if ( 
$dbv_persons->isNew() )
        {
            
$dbv_persons = new dbv_persons();

            
$format 'INSERT INTO %s
                                   ( persons_id, persons_sex, persons_surname, persons_firstname,
                                        persons_nicknames, persons_country, persons_country2, persons_birth,
                                        persons_height, persons_birthwhere, persons_picture, persons_xoopsid,
                                        persons_occupation, persons_lastupdate )'
;
            
$format .= 'VALUES (%u, %u, %s, %s, %s, %s, %s, %s, %u, %s, %s, %u, %u, %s)';
            
$sql sprintf$format
                            
$this->db->prefix'dbv_persons' ), 
                            
$persons_id,
                            
$persons_sex,
                            
$this->db->quoteString$persons_surname ),
                            
$this->db->quoteString$persons_firstname ),
                            
$this->db->quoteString$persons_nicknames ),
                            
$this->db->quoteString$persons_country ),
                            
$this->db->quoteString$persons_country2 ),
                            
$this->db->quoteString$persons_birth ),
                            
$persons_height,
                            
$this->db->quoteString$persons_birthwhere ),
                            
$this->db->quoteString$persons_picture ),
                            
$persons_xoopsid,
                            
$persons_occupation,
                            
$this->db->quoteString$persons_lastupdate ) );
            
$force true;
        }
        else
        {
            
$format 'UPDATE %s
                          SET '
;
            
$format .= 'persons_id = '%u',
                        persons_sex = '
%u',
                        persons_surname = '
%s',
                        persons_firstname = '
%s',
                        persons_nicknames = '
%s',
                        persons_country = '
%s',
                        persons_country2 = '
%s',
                        persons_birth = '
%s',
                        persons_height = '
%u',
                        persons_birthwhere = '
%s',
                        persons_picture = '
%s',
                        persons_xoopsid = '
%u',
                        persons_occupation = '
%u',
                        persons_lastupdate = '
%s'';
            
$format .= ' WHERE persons_id = '%u'';
            
$sql sprintf$format,
                            
$this->db->prefix'dbv_persons' ),
                            
$persons_id,
                            
$persons_sex,
                            
$this->db->quoteString$persons_surname ),
                            
$this->db->quoteString$persons_firstname ),
                            
$this->db->quoteString$persons_nicknames ),
                            
$this->db->quoteString$persons_country ),
                            
$this->db->quoteString$persons_country2 ),
                            
$this->db->quoteString$persons_birth ),
                            
$persons_height,
                            
$this->db->quoteString$persons_birthwhere ),
                            
$this->db->quoteString$persons_picture ),
                            
$persons_xoopsid,
                            
$persons_occupation,
                            
$this->db->quoteString$persons_lastupdate ),
                            
$persons_id );
        }

        if ( 
false != $force )
        {
            
$result $this->db->queryF$sql );
        }
        else
        {
            
$result $this->db->query$sql );
        }

        if ( !
$result )
        {
            return 
false;
        }

        if ( empty( 
$persons_id ) )
        {
            
$persons_id $this->db->getInsertId();
        }

        
$dbv_persons->assignVar'persons_id'$persons_id );

        return 
true;
    }
[
b][color=CC0000]...[/color][/b]
}


Post édité pour supprimer les méthodes ne posant pas de problèmes

Posté le : 03/08/2005 23:45

Edité par DaBoyz sur 04/08/2005 18:55:37

DB site...
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Semi pro
Inscrit: 06/01/2004 09:37
De Non loin de Paris
Messages: 666
Je vient de regarder ton code, mais je n'ai pas trouvé d'ou venait l'erreur, cependant, ce code est bien compliqué et n'utilise pas toutes les possibilitées de XOOPS.
La version 2.2 de XOOPS introduit une nouvelle classe : XoopsPersistableObjectHandler qui simplifie grandement le travail des développeurs. Si ton module n'est pas destiné exclusivement a cette version de XOOPS, tu peut toujours copier dans un fichier qui sera inclue dans ton module cette classe.
Voila un classe qui l'utilise :
class ExtcalEventmember extends XoopsObject
{

    function 
ExtcalEventmember()
    {
        
$this->initVar('eventmember_id'XOBJ_DTYPE_INTnullfalse);
        
$this->initVar('event_id'XOBJ_DTYPE_INTnulltrue);
        
$this->initVar('uid'XOBJ_DTYPE_INTnulltrue);
    }

}

class 
ExtcalEventmemberHandler extends XoopsPersistableObjectHandler
{
    function 
ExtcalEventmemberHandler(&$db)
    {
        
$this->XoopsPersistableObjectHandler($db'extcal_eventmember''ExtcalEventmember', array('event_id''uid'));
    }
    
    function 
createEventmember($var_arr)
    {
        
$eventmember $this->create();
        
$eventmember->setVars($var_arr);
        return 
$this->insert($eventmembertrue);
    }
    
    function 
deleteEventmember($key)
    {
        
$eventmember $this->get($key);
        return 
$this->delete($eventmembertrue);
    }
    
    function 
getMembers($eventId)
    {
        
$memberHandler xoops_gethandler('member');
        
$criteria = new Criteria('event_id'$eventId);
        
$eventMember $this->getObjects($criteria);
        
$count count($eventMember);
        if(
$count 0) {
            
$in '('.$eventMember[0]->getVar('uid');
            
array_shift($eventMember);
            foreach(
$eventMember as $member) {
                
$in .= ','.$member->getVar('uid');
            }
            
$in .= ')';
            
$criteria = new Criteria('uid'$in'IN');
        } else {
            
$criteria = new Criteria('uid''(0)''IN');
        }
        
$ret = array('memberNb'=>$count'member'=>$memberHandler->getUserList($criteria));
        return 
$ret;
    }
    
}

Cette classe est trés simple, et utilise peu XoopsPersistableObjectHandler, mais je te conseille de regarder de plus prés cette classe. Si tu a des questions n'hésite surtout pas.

A+

Posté le : 04/08/2005 00:21
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Aspirant
Inscrit: 04/02/2003 05:02
De Toulouse, France
Messages: 47
Citation :
ce code est bien compliqué et n'utilise pas toutes les possibilitées de XOOPS


Compliqué, sans doute mais la base est générée par le module classgenerator, je n'ai quasiment rien retouché. La complexité est plutôt due à la complexité de la classe XoopsObject et à sa compréhension ...
Pour ce qui du fait que le code n'utilise pas toutes les possibilités de Xoops, pourrais-tu préciser s'il te plait ? Je reprends actuellemment tous le code pour utiliser des classes et des méthodes de l'API Xoops, donc, cela m'intéresse fortement.

Pour ce qui est de Xoops 2.2, n'y étant pas encore passé (plutôt fan de la doctrine ministérielle "pour la mise à jour vers la dernière version, il est urgent d'attendre" ... mais j'avais jeté un coup d'oeil à cette nouvelle classe ...

Pour le moment, je pense continuer à développer en faisant les enregistrements au travers d'une fonction mais j'avoue ne pas comprendre pourquoi ce code ne marche pas ... personne ne semble éprouver de problèmes avec des classes générées par classgenerator, d'où ma question initiale ...

Merci pour ta réponse dans tous les cas

Posté le : 04/08/2005 19:05

DB site...
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Semi pro
Inscrit: 06/01/2004 09:37
De Non loin de Paris
Messages: 666
Si tu veut utiliser l'API de XOOPS, je te conseile de copier la classe XoopsPersistableObjectHandler et de l'inclure dans ton module, elle est vraiment trés simple d'utilisation et tu ne te sert quasiment pas de la classe XoopsObject.

A+

Posté le : 04/08/2005 21:10
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Guest_
salut Daboyz,

Tout d'abord, je suis content de te revoir sur Xoops France

Concernant ta question, c'est vrai qu'il y a un problème avec ClassGenerator, les classes générées doivent etre systématiquent reprises pour etre corrigées. Pour ma part j'ai laissé tomber.

Désolé de ne pas t'avoir donné la réponse

A+
Hervé

Posté le : 05/08/2005 07:11
Partager Twitter Partagez cette article sur GG+
Re: classGenerator -> méthode insert ne fonctionne pas
Aspirant
Inscrit: 04/02/2003 05:02
De Toulouse, France
Messages: 47
Citation :
Tout d'abord, je suis content de te revoir sur Xoops France

j'étais toujours présent mais non connecté ... je suivais vos activités et votre dévouement à la communauté (ce dernier n'ayant pas toujours pas faibli malgrè le temps qui passe, super).

Citation :
Concernant ta question, c'est vrai qu'il y a un problème avec ClassGenerator, les classes générées doivent etre systématiquent reprises pour etre corrigées. Pour ma part j'ai laissé tomber.

C'est bien ce que je pensais et je vais donc, peut-être pas laisser tomber (utile de générer toutes les méthodes d'un coups) mais l'utiliser plutôt comme un générateur de modèle ... quelquechose du genre ... en attendant, je vais devoir reprendre mes classes; dommage, tout marche, sauf l'enregistrement ...

Citation :
Désolé de ne pas t'avoir donné la réponse

Oulà, pas de soucis là dessus, tu veux rire

Posté le : 08/08/2005 19:18

DB site...
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

64 Personne(s) en ligne (50 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 64 | Plus ...