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(3) unsigned NOT NULL auto_increment,
desc_name varchar(255) NOT NULL DEFAULT '',
desc_desc text,
desc_order smallint(3) unsigned NOT NULL default '0',
desc_display tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (desc_id),
KEY sort (desc_order, desc_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 (5) NOT 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_name, desc_desc, texte_txt, o.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, $val, true);
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