2009-07-23 3 views
0

J'ai un problème avec mon application CakePHP. Je veux récupérer les valeurs de la table nommée choix que je récupère correctement. Les valeurs arrivent correctement dans la partie contrôleur. Mais dans ma partie de vue, il est montrant que les dernières valeurs récupérées ...CakePHP views part

Mon code est:

function view($formid = null,$userid=null)//viewPage 
     { 
     $this->set('Forms',$this->Form->find('all',array('conditions'=>array('Form.id'=>$formid),'fields'=>array('Form.name')))); 
     $this->data['Form']['id']=$formid; 
     $viewfields=$this->Form->viewForms($this->data); 
     $this->set('viewfields',$viewfields);//retreives all the Attributes from the Form (like attribute_id,,label) 

      foreach($viewfields as $attributeid)://For each attribute id , i am checking if there is any choices in the Table Choices 
        $choices=$this->Choice->find('all',array('conditions'=>array('Choice.attribute_id'=>$attributeid['Attribute']['id'],'Choice.label'=>$attributeid['Attribute']['label']),'fields'=>array('Choice.choice','Choice.label'))); 

       if(!empty($choices)){ 
       $this->set('options',$choices); 

          foreach($choices as $c): 
            echo $c['Choice']['label']; 
            echo $c['Choice']['choice']; 

           endforeach; 
         } 

      endforeach; 
     } 

Les travaux ci-dessus et dans la partie du contrôleur, mais si j'utilise:

      foreach($options as $c): 
           echo $c['Choice']['label']; 
       echo $c['Choice']['choice']; 

          endforeach; 

Seules les dernières valeurs sont affichées ... Pourquoi est-ce le cas? Par exemple. ma table d'attributs contient des entrées comme:

 id form_id label type sequence_no 
     1 1  Name text 1 
     2 1  age number 2 
     3 1  gender dropdown 3 
     4 1  email-id email 4 
     5 1  qualification dropdown 5 

Dans ma table de choix:

 id attribute_id label choice sequence 
     1 3    gender male 1 
     2 3    gender female 2 
     3 5   qualification BE 1 
     4 5    qualification ME 2 
     5 5    qualification MBA 3 

Dans le view.ctp que je reçois uniquement les entrées de qualification. Pourquoi cela est-il ainsi?

Edit:

Ma page de vue est comme:

<?php foreach ($viewfields as $r): ?> 
    if($r['Attribute']['type']=='text'||$r['Attribute']['type']=="email"){ 
echo $form->input($r['Attribute']['label'], array('id'=>$r['Attribute']['id'],'name'=>$r['Attribute']['label'],'type'=>'text','style' => 'width:' . $r['Attribute']['size'] . 'px')); 
?><br> 
} 

    else if($r['Attribute']['type']=='dropdown') 
           { 
//here i want the Male and female for the label gender and for the label Qualification as BE ME MBA 


echo $form->input($r['Attribute']['label'], array('id'=>$r['Attribute']['id'],'name'=>$r['Attribute']['label'],'options' => array(1,2,3,4,5))); 

     } 
<?php endforeach; ?> 

pour un échantillon que je l'ai utilisé 12345 comme des options ..

dans cette boucle elseif(dropdown) j'ai essayé les options comme vous le dites comme

 foreach($options as $c): 

                echo $c['Choice']['label']; 
               echo $c['Choice']['choice']; 
                echo $c[1]['Choice']['label']; 
                echo $c[1]['Choice']['choice']; 
                endforeach; 

Mais je reçois les erreurs et aussi le tableau entier est affiché mais je ne veux que les options de genre pour l'étiquette et les options de qualification pour les qualifications.

Répondre

0
$this->set('options', $choices); 

Cela définira une variable appelée $options dans votre vue qui contient $choices. Vous ne pouvez pas définir cette variable plusieurs fois, il ne peut y avoir qu'un $options dans votre vue. Vous écrasez la même variable plusieurs fois, donc seulement la dernière fois qu'elle reste. Ce que vous voulez quelque chose de plus semblable à:

$options = array(); 
foreach (...) { 
    ... 
    $options[] = $results; 
} 
$this->set('options', $options); 

Mais je pense que votre code pourrait utiliser beaucoup plus d'améliorations. Récupérer plusieurs fois les résultats de la base de données dans une boucle foreach n'est pas une bonne idée.

1

Vous devriez essayer d'ajouter attribute_id comme clé de choix $,

foreach($viewfields as $attributeid)://For each attribute id , i am checking if there is any choices in the Table Choices 
      $choices[$attributeid['Attribute']['id']]=$this->Choice->find('all',array('conditions'=>array('Choice.attribute_id'=>$attributeid['Attribute']['id'],'Choice.label'=>$attributeid['Attribute']['label']),'fields'=>array('Choice.choice','Choice.label'))); 
      $this->set('options',$choices); 
endforeach; 

Et vu que vous pouvez manipuler ce tableau par ........... [Vérifiez votre code view.ctp donné ici .. placez ceci à la place du tableau (1,2,3,4,5)]

echo $form->input($r['Attribute']['label'], array('id'=>$r['Attribute']['id'],'name'=>$r['Attribute']['label'],'options' => $options[$r['Attribute']['id']]));