CakePHP查找列表,其组名与数据名称相同

时间:2013-01-18 10:42:05

标签: list cakephp select cakephp-2.0

我必须显示一个选择框,其中包含按一般流派分组的不同电影类型。 为此,我使用了CakePHP默认方法find('list',...)

我的电影类型数据库表是这样完成的:

|_id_|_name_________|_general_genre_|
|  1 | Action       | Action        |
|  2 | Martial arts | Action        |
| .. | ............ | ............. |

问题是,如果该组具有与数据相同的名称(例如:" Action"),则数据不会显示为组名的好处。

所以我的选择框如下:

Select a genre
  - Action
    - Martial arts
    - ...

我想要的是:

Select a genre
  - Action
    - Action
    - Martial arts
    - ...

当然,原因是,无法选择组项目。

提前致谢!

3 个答案:

答案 0 :(得分:2)

好的,经过一些研究后,我最终得到了答案。 这是要添加到Html->input()方法的属性。此属性为showParents。 因此,如果您想创建一个包含组的选择框,并且在该组中包含与该组具有相同名称的项目,则必须执行以下操作:

  • 选择包含以下列表的列表:

    $options = $this->TableName->find('list', array(
       'fields' => array('id', 'name', 'group_name')
    ));
    
  • 显示选择输入:

    $this->Html->input('InputId', array(
       'type' => 'select',
       'options' => $options,
       'showParents' => true
    ));
    

希望这可以提供帮助;)

答案 1 :(得分:1)

这是预期的行为。生成表单元素时使用showParents选项。 API甚至有一个例子。对于你未能检查的这种情况:)

答案 2 :(得分:0)

您可以通过设置find('list')选项覆盖$options['fields']返回的默认字段(主键和displayField)。如果需要,这些可以是两个以上的字段。这应该接近你所需要的:

$this->Genre->find('list', array(
    'fields' => array('id', 'name', 'general_genre')
));

这将返回如下数组:

'Action' => 
    1 => 'Action'
    2 => 'Martial arts'

您应该可以在下拉列表中使用它。