2010-01-18 4 views
2

J'ai ce tableau dans ma DB:CakePHP

Group 

- ID-Name 
- 1 -abc 
- 2 -def 
- 3 -ghi 

Pages 

- id-group_id-name 
- 1 -1  -home 
- 2 -1  -about us 

Maintenant, je voulais faire une boîte de sélection qui les regroupe par « groupe » en utilisant:

function add() { 

$this->set('pages', $this->Page->find('list', array('fields' => array('Page.id', 'Page.name', 'Page.group_id')))); 

} 

Dans mon add. ctp:

echo $form->input('group_id', array('options' => $pages)); 

La sortie:

<select name="data[Page][id]" id="PageId"> 
<optgroup label="1"> 
<option value="1">Home</option> 
<option value="2">About Us</option> 
</optgroup> 
</select> 

Je voulais que le optgroup pour afficher le nom du groupe actuel pas l'ID de groupe comme:

<select name="data[Page][id]" id="PageId"> 
<optgroup label="abc"> 
<option value="1">Home</option> 
<option value="2">About Us</option> 
</optgroup> 
</select> 

J'ai essayé celui-ci:

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'))); 

Mais groupe 'Group.id' et » .name 'est inconnu.

Merci!

+0

peut vous montrer tout le code impliqué dans la création de cette zone de sélection? Vous définissez généralement optgroups en passant un nom de tableau comme ceci: 1. entrée ('field', array ('options' => array ( 2. 'Label1' => array ( 3. 'Valeur 1' => 'Étiquette 1', 4. 'Valeur 2' => 'Étiquette 2' 5.), 6. 'Label2' => array ( 7. 'Value 3' = > 'Étiquette 3' 8.) 9.))); ?> – pcp

+0

J'ai vraiment compris cela, ma même question peut être trouvée ici http://cakeqs.org/eng/questions/view/find_list_problem. J'espère que cela peut vous aider les gars :) –

Répondre

3

Essayez ceci:

$this->Page->find('list', array(
    "fields" => array("Page.id", "Page.name", "Group.name"), 
    "joins" => array(
     array(
      "table" => "groups", 
      "alias" => "Group", 
      "type" => "INNER", 
      "conditions" => array("Group.id = Page.id") 
     ) 
    ), 
    "order" => array(...) // whatever ordering you want 
)); 
+0

fantastique! Merci. –

0

Je ne suis pas sûr que votre et les modèles du groupe sont bien associés:

http://book.cakephp.org/view/78/Associations-Linking-Models-Together

Mais au besoin moins, vous avez probablement charger le modèle du Groupe dans le contrôleur de la page où vous avez la $ this-> Page-> find (..) recherche comme ceci:

$this->loadModel('Group'); 

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'))); 
0

également 'group' => 'Group.name' est un autre paramètre que vous pouvez définir pour trouver. Il va configurer un GROUP BY dans le SQL.

1

Il m'a fallu un certain temps ...

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'),'recursive'=0)); 

Sinon find (« liste ») utilise récursive = -1 et ne se charge pas les données du groupe

1

d'exécution zone Sélectionner dans le groupe d'options dans CakePHP est une tâche très simple.

Suivez les étapes indiquées pour implémenter le groupe d'options.

par exemple si vous avez deux tables:

  1. Catégorie,
  2. Sous-catégorie

modèle Créer à la fois table et ajouter une ligne dans le modèle de sous-catégorie,

var $belongsTo = array('Category'); 

Donc, le modèle de votre sous-catégorie ressemble à

class Subcategory extends AppModel 
{ 
    var $name = 'Subcategory'; 
    var $belongsTo = array('Category'); 
} 

Now come to controller part 

$this->set('subcategory',$this->Subcategory->find('list', array(
    "fields" => array("Subcategory.id", "Subcategory.field2", "Category.field1"), 
    "joins" => array(
      array(
        "table" => "categories", 
        "alias" => "Category", 
        "type" => "INNER", 
        "conditions" => array("Category.id = Subcategory.category_id") 
      ) 
    ), 
)));?> 

Tâche vu une partie

<?php 
echo $form->input('subcategory_id',array('type'=>'select','options'=>$subcategory)); 
?>