Bonjour,

Voila je rencontre un petit problème avec mon code pour afficher le AS du Group_Concat, une idée ?

Ce que je fais

                $d['partners'] = $this->Etablissement->find('all', array(
                    'fields'     => 'Etablissement.*,Agregat.*,Ville.*,EtablissementKeyword.*, GROUP_CONCAT(`Keyword`.lib SEPARATOR ", ") AS motscles, Keyword.*',
                    'joins'      => $joins,
                    'conditions'=>'Etablissement.partner = 1 AND Departement2.code = "'.$dep_id.'" AND (Etablissement.fin >= NOW() OR Etablissement.fin IS NULL) AND Etablissement.agregat_id='.$id.' GROUP BY Etablissement.id',
                    'contain' => array('Ville','Agregat','EtablissementKeyword'),
                    'order'      => 'RAND()',
                    'limit' => 10
            ));

Ce que j'obtiens

Quand j'affiche echo $v['Keyword']['lib']; : aucun souci un mot clé s'affiche mais pour afficher le "AS" je tente ça : $v['Keyword']['motscles']; et là c'est le bug, que dois je faire pour afficher ce nouveau champ imaginaire ?

Merci d'avance.

16 réponses


regarde du coté des virtual fields

$this->Etablissement->virtualFields = array(
    'motscles' => 'GROUP_CONCAT(`Keyword`.lib SEPARATOR ", ")'
);

merci de ton retour keulu, jamais utilisé les virtual fields, il faut que je le place où ?

avant ton find

ou dans ton model

public $virtualFields = array(
    'nom' => 'CONCAT(User.prenom, " ", User.nom_famille)'
);

fait, j'ai modifié en $this->Etablissement->virtualFields['motscles']= 'GROUP_CONCAT(Keyword.lib SEPARATOR ", ")'; car il y avait des erreurs
mais comment je peux faire l'appel du coup sur mon fichier ?

ben maintenant si tu fait un select, tu va avoir une entrée "motscles"

oui ça je l'avais déjà avant l'entrée motscles mais lorsque je souhaite l'afficher sur mon fichier d'affichage cela ne fonctionne pas, pour les éléments de la même requête je fais echo $v['Keyword']['lib'] et ça fonctionne
pour motscles je fais echo $v['Keyword']['motscles'] et j'ai undefined index motscles

ben regarde la tete de ton tableau renvoyé en utilisant debug()

moi je ferai peut etre plus un $v['motscles']

'EtablissementKeyword' => array(
'id' => '1596',
'etablissement_id' => '24594',
'keyword_id' => '1',
(int) 0 => array(
'id' => '1596',
'etablissement_id' => '24594',
'keyword_id' => '1'
),
(int) 1 => array(
'id' => '1597',
'etablissement_id' => '24594',
'keyword_id' => '29'
)
),
(int) 0 => array(
'motscles' => 'Unité Alzheimer, Hébergement Temporaire'
),

en fait, je pense que tu devrai mettre ton virtual field au niveau de ton model Keyword. pour qu'a chaque fois que tu récupère qqch depuis keyword, ca te mette cette entrée en plus. tu aura accès a Keyword.motscles. Parce que la, tu l'as mis au niveau de l'établissement (pas top)

<?php echo $v['Keyword']['motscles'][0]; ?> affiche rien

ben normal...

c'est pas plutot : <?php echo $v['Keyword'][0]['motscles']; ?> ?

et dans ton contain, t'as pas selectionné Keyword...

'contain' => array('Ville','Agregat','EtablissementKeyword'),

message d'erreur : Undefined offset: 0

je t'ai donné les pistes a suivre, a toi de débugger tout seul, je connais pas la structure de tes modèles. mais le virtual field est fait pour ce que tu veux faire. a toi de lire la doc de cakephp, debugger tes objets, et comprendre pourquoi t'as un undefined offset. :)

Bon courage

je viens de trouver juste avant le week-end c'est parfait, la solution était echo $v[0]['motscles']; car motscles est associé à aucune table . Merci de ton aide !