Affichage du champ AS d'un GROUP_CONCAT

Par lardierem, il y a 9 ans


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

keulu, il y a 9 ans

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

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

lardierem, il y a 9 ans

message d'erreur : Undefined offset: 0

keulu, il y a 9 ans

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

lardierem, il y a 9 ans

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 !

keulu, il y a 9 ans

ben normal...

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

keulu, il y a 9 ans

regarde du coté des virtual fields

$this->Etablissement->virtualFields = array( 'motscles' => 'GROUP_CONCAT(`Keyword`.lib SEPARATOR ", ")' );
lardierem, il y a 9 ans

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

keulu, il y a 9 ans

avant ton find

ou dans ton model

public $virtualFields = array( 'nom' => 'CONCAT(User.prenom, " ", User.nom_famille)' );
lardierem, il y a 9 ans

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 ?

keulu, il y a 9 ans

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

lardierem, il y a 9 ans

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

keulu, il y a 9 ans

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

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

lardierem, il y a 9 ans

'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'
),

keulu, il y a 9 ans

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)

lardierem, il y a 9 ans

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