[Doctrine] Select Distinct
Bonjour à tous , voici mon problème .
Après vous avoir demandé comment construire dynamiquement un tableau contenant les différentes clés (activités ) de ma table .J'ai de nouveau un souci .
action.class :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
<?php
/**
* activites actions.
*
* @package SaisieTemps
* @subpackage activites
* @author Your name here
* @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
*/
class activitesActions extends sfActions
{
protected $niveau;
/**
* Executes index action
* @param sfRequest $request A request object
*/
public function executeIndex(sfWebRequest $request)
{
$i = 1;
$niveaux1 = Doctrine_Query::create()
->select('code,nom')
->from('activites')
->where('pere_id IS NULL and active = "1"')
->fetchArray(); //On exécute la requête
foreach($niveaux1 as $niveau1)
{
$this->niveau[$i][] = array('code'=>$niveau1['code'],'nom'=>$niveau1['nom']);
$id = $niveau1['id'];
$this->enfant($id,$i);
}
$this->niveaux = $this->niveau;
}
protected function enfant($id,$i)
{
$niveaux2 = Doctrine_Query::create()
->select ('code,nom')
->from('activites')
->where('pere_id = ? and active = "1"',array($id))
->fetchArray();
if(isset($niveaux2[0]))
{
$i++;
foreach($niveaux2 as $niveau2)
{
$this->niveau[$i][] = array('code'=>$niveau2['code'],'nom'=>$niveau2['nom']);
$this->enfant($niveau2['id'],$i);
}
}
}
}
?> |
IndexSuccess :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
<link type="text/css" href="../css/ui.multiselect.css" rel="stylesheet" />
<script type="text/javascript" src="../js/plugins/localisation/jquery.localisation-min.js"></script>
<script type="text/javascript" src="../js/plugins/tmpl/jquery.tmpl.1.1.1.js"></script>
<script type="text/javascript" src="../js/plugins/blockUI/jquery.blockUI.js"></script>
<script type="text/javascript" src="../js/ui.multiselect.js"></script>
<script type="text/javascript">
$(function(){
$.localise('ui.multiselect', {/*language: 'fr',/* */ path: 'js/locale/'});
$(".multiselect").multiselect();
$("#tabs").tabs();
//getter
var dividerLocation = $('.selector').dialog('option', 'dividerLocation');
//setter
$('.selector').dialog('option', 'dividerLocation', 0.4);
});
</script>
</script>
<?php include_component('home','header',array('titre' => 'Extraction de données brute'))?>
<div id='formulaire' style="width: 95%; margin-left: auto; margin-right: auto" align="left">
<p><b class="d1top"><b class="r11"></b><b class="r12"></b><b class="r13"></b><b class="r14"></b></b></p>
<center><h><STRONG><FONT SIZE=5>Activités :</FONT></STRONG></h2></center> <br></br>
<div class='formulaire'>
<div id="tabs" >
<ul >
<?php foreach($niveaux as $i=>$niveau):?>
<li><a href="#tabs-<?php echo $i?>">Niveau <?php echo $i?></a></li>
<?php endforeach;?>
</ul>
<?php foreach($niveaux as $i=>$niveau):?>
<div id="tabs-<?php echo $i?>">
<form action="" target="submitFrame" style="border:medium;">
<dl>
<select class="multiselect" multiple="multiple" name="niveau[]" style="width: 70% ; margin-left: auto; margin-right: auto" align="center" >
<?php foreach($niveau as $activite):?>
<option value="<?php echo $activite['code']?>"><?php echo $activite['nom']?></option>
<?php endforeach;?>
</select>
</dl>
</form>
</div>
<?php endforeach;?>
</div>
</div>
</form>
</div> |
( Désolé pour le code qui n'est pas forcément des mieux présenté. )
Voila le résultat pour le niveau 2 de mes activités :
http://img203.imageshack.us/img203/8974/test3k.jpg
Le problème est qu'une sous activité peut être du même nom dans plusieurs activités. ( Ex: Appro peut etre présent dans une activité Absence , et dans une autre .. )
Or , comme vous pouvez le constater , il s'affiche plusieurs fois le meme libellé , ceci en fait pour nombre d'entre mes clés. Or ce que je souhaiterais , c'est n'afficher qu'une seule fois cette clé dans ce tableau , qui , en la cochant , sélectionnerait toutes les clés du même nom .
Savez vous quel petit bout de code dans ma requête me permettrait de faire ceci ,car j'ai beau essayé d'utiliser le distinct, cela ne fonctionne pas.