2010-01-18 33 views
2

我这个表我的DB:CakePHP的名单问题

Group 

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

Pages 

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

现在,我想作一个选择框,通过“组”使用它们分组:

function add() { 

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

} 

在我的外接。 CTP:

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

输出:

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

我希望OPTGROUP显示实际的组名不是组ID,如:

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

我已经试过这一个:

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

但 'Group.id' 和“组.name'是未知的。

谢谢!

+0

可以显示所有参与创建选择框代码的任务? <?PHP回声$形式 - > 1.输入( '场',阵列( '选项'=>数组( 2. '的Label1'=>数组(: 您通常通过传递数组名这样定义optgroups 5.'Value 1'=>'Label 1', 4.'Value 2'=>'Label 2' 5.), 6.'Label2'=> array( 7.'Value 3'=' >'Label 3' 8.) 9.))); ?> – pcp 2010-01-18 17:33:10

+0

我真的已经搞清楚了这一点,我同样的问题,都可以在这里找到http://cakeqs.org/eng/questions/view/find_list_problem。 我希望这可以帮助你们:) – 2010-01-18 20:14:29

回答

3

试试这个:

$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

太棒了!谢谢。 – 2010-01-19 14:32:23

0

我不知道你的页面和编组模式是否正确关联:

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

但最起码,你可能需要加载组模型,你必须在页面控制器$这个 - >页面 - >找到(..)查询,像这样:

$this->loadModel('Group'); 

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

另外,'group'=>'Group.name'是您可以为查找设置的另一个参数。它将在SQL中设置一个GROUP BY。

1

我花了一段...

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

否则找到(“名单”)使用递归= -1,将不会加载该组数据

1

实施CakePHP中的选项组选择框是一项非常简单的任务。

按照给定的步骤来实现选项组。

例如,如果您有两个表:

  1. 类别,
  2. 子目录

两个表创建模型和子类别模型添加一条线,

var $belongsTo = array('Category'); 

所以你的子类别模型看起来像

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") 
      ) 
    ), 
)));?> 

鉴于部分

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