Fork me on GitHub






getByLink()
Aspirant
Inscrit: 01/09/2007 08:40
De Île de la Réunion (974)
Messages: 79
Bonjour,

Je développe un module pour xoops2.6.0beta3 ... En effet, je prépare l'avenir. J'ai un soucis avec la fonction getByLink() ... En fait, la requête SQL est correcte, mais le résultat dans l'objet généré est lié uniquement à la première table.

Voici les tables SQL :
CREATE TABLE sequencebuilder_description (
  
desc_id         smallint(3unsigned    NOT NULL auto_increment,
  
desc_name       varchar(255)            NOT NULL DEFAULT '',
  
desc_desc       text,
  
desc_order      smallint(3unsigned    NOT NULL default '0',
  
desc_display    tinyint(1unsigned     NOT NULL default '0',
  
PRIMARY KEY (desc_id),
  
KEY sort (desc_orderdesc_name)
ENGINE=MyISAM;

CREATE TABLE  sequencebuilder_descriptiontexte (
  
texte_id int (8)   NOT NULL  auto_increment,
  
texte_txt text NULL,
  
desc_id int (5)   NOT NULL default '0',
  
elem_id int (5NOT NULL default '0',
  
PRIMARY KEY (texte_id),
  
KEY desc_id (desc_id),
  
KEY elem_id (elem_id)
ENGINE=MyISAM;


Et j'ai un Handler sur les tables faits via un fichier /class/helper.php
/**
     * @return SequencebuilderDescriptionsHandler
     */
    
public function getHandlerDescriptions()
    {
        return 
$this->getHandler('description');
    }
    
/**
     * @return SequencebuilderDescriptionsHandler
     */
    
public function getHandlerDescriptionsTexte()
    {
        return 
$this->getHandler('descriptiontexte');
    }


Je souhaite faire cette requête SQL (copié/collé du résultat venant de PhpMyadmin) le code fonctionne donc à moitié :
SELECT desc_namedesc_desctexte_txto.texte_id
FROM x4b9_sequencebuilder_descriptiontexte o
LEFT JOIN x4b9_sequencebuilder_description l ON o
.desc_id l.desc_id


Via le code suivant :
$related_Handler $helper->getHandlerDescriptionsTexte();
$related_Handler->table_link $related_Handler->db->prefix('sequencebuilder_description');
$related_Handler->field_link 'desc_id'// champ de la table en jointure
$related_Handler->field_object 'desc_id';    // champ de la table courante
$val=array('desc_name','desc_desc','texte_txt');

// Criteria
$criteria_label = new CriteriaCompo();
$criteria_label->add(new Criteria('l.desc_display'true'='));
    
$descriptions_label $related_Handler->getByLink($criteria_label$valtrue);


Le résultat me donne uniquement des champs liés à la première table, or la requête SQL est bonne et elle me donne ceci (elle apparaît dans la liste des requêtes du débogueur sans erreurs !! De plus je la teste sous PhpMyadmin via un copie/collé), le résultat est bon :

desc_name    desc_desc    texte_txt    texte_id
Santé    Important 
!    111    1
Effet sur le squellette        revu    2
Muscles    Important pour chaque posutr    333    3
Santé    Important 
!    1111    4
Muscles    Important pour chaque posutr    2222    5
Effet sur le squellette        3333    6


Mais dans l'objet généré RIEN ! Je n'y comprends plus rien pour le coup ... Quelqu'un a t-il une bonne idée ?

Merci de vos réponses,
Bruno


Posté le : 04/08/2014 12:27
Partager Twitter Partagez cette article sur GG+
Re: getByLink()
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
pour ma part, j'ai jamais réussi a faire une jointure avec les class proposées par Xoops, et c'est vrai, c'est pas bien, j'ai pas cherché plus loin, et j'ai pas mal de modules écrits par mes soins.
Je me contente donc d'utiliser la class xoopsDB, d'ailleurs comme la dernière version du module newbb.
Désoler de ne pas pouvoir te renseigner plus sur l'utilisation de la class "handler"

Posté le : 04/08/2014 14:34
Partager Twitter Partagez cette article sur GG+
Re: getByLink()
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 3528
Peut-être peux-tu demander à Richard, le développeur principal qui s'occupe de Xoops 2.6 ? Ou demander à alain91, que je ne connais pas qui s'occupe aussi de Xoops 2.6 mais qui lui est français

Posté le : 04/08/2014 14:51

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: getByLink()
Aspirant
Inscrit: 01/09/2007 08:40
De Île de la Réunion (974)
Messages: 79
Re,

En fait, c'est quelque chose qui doit normalement fonctionner car ici (alpha2) :
xoops-2.6.0-alpha2/htdocs/modules/page/admin/related.php

ça y est !

Ici (alpha3) :
xoops-2.6.0-alpha3/htdocs/modules/profile/class/field.php


Et j'ai en gros calqué ... Pour faire ce module, j'ai forké l'extension images/ et comme tout y est bien écrit avec des criteria() partout, un fichier class/helper.php tout simple et bien fait, j'ai voulu continuer sur cette lancé ...

Je vais peut être contacter les développeurs du noyau ... J'attends un peu avant au cas où la lumière viendrait ...

Je pensais normalement pouvoir atteindre le champ 'texte_txt' dans l'objet généré ... mais s'il est bien présent dans la requête SQL qui est en plus valide, il n'y est pas dans l'objet "joint" ...

Merci en tout cas,
Bruno

Posté le : 04/08/2014 15:51
Partager Twitter Partagez cette article sur GG+
Re: getByLink()
Aspirant
Inscrit: 01/09/2007 08:40
De Île de la Réunion (974)
Messages: 79
Bonjour,

Je suis tjrs dans l'impasse, cependant j'ai codé une méthode dans la classe concernée c'est donc plus propre, mais cela ne fonctionne pas :
public function getTexteDescObjects($criteria null$start=0$limit=0$id_as_key false$asobject true)
    {
        
$this->table_link $this->db->prefix('sequencebuilder_description');

        if (isset(
$criteria)) {
            
$criteria = new CriteriaCompo($criteria);
        } else {
            
$criteria = new CriteriaCompo();
        }
    
$criteria->setSort('l.desc_order');
        
$criteria->setOrder('ASC');
        
$criteria->setStart($start);
        
$criteria->setLimit($limit);

    
$the_ar = array('o.*','l.*');
      
//  return parent::getByLink( $criteria, null, $asobject, 'desc_id', 'desc_id');

    
$texte_obj $this->getByLink$criteria$the_ar$asobject'desc_id''desc_id');
print_r($texte_obj);
    foreach (
$texte_obj as $texte) {
          echo 
"texte_txt=" $texte->getVar('texte_txt'); echo "<br /> ";
          echo 
"desc_id=" .  $texte->getVar('desc_id');
          echo 
"desc_name=" .  $texte->getVar('desc_name');
    }
    return 
true// En attendant mieux !!
    
}


Ici pour faire l'essai j'affiche les champs et le champ de la table en jointure 'desc_name' ne donne rien ... La requête SQL qui est visible en mode debogage est bonne et affiche bien le champ 'desc_name' qui me manque ...

Que faire ?

Bonne journée,
Bruno

Posté le : 05/08/2014 08:29
Partager Twitter Partagez cette article sur GG+
Re: getByLink()
Semi pro
Inscrit: 27/08/2003 11:03
De Perpignan
Messages: 1255
As-tu essayé quelque chose comme ça ?
$object_id $related_Handler $helper->getHandlerDescriptionsTexte();  
$related_Handler->table_link $related_Handler->db->prefix('sequencebuilder_description');  
$related_Handler->field_link 'desc_id'// champ de la table en jointure  
$related_Handler->field_object 'desc_id';    // champ de la table courante  
$criteria_label= new Criteria 'l.desc_display' $object_id '=' );    
$descriptions_label $related_Handler->getCountByLink($criteria_label);

Posté le : 27/08/2014 17:12

Si tu frappes sur ta tête avec une cruche et que ça sonne creux, n'en déduis pas forcément que c'est la cruche qui est vide. ...
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

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