4

我必须显示一个选择框,其中包含按一般流派分组的不同电影流派。为此,我使用的是 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
    - ...

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

提前致谢!

4

3 回答 3

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
    ));
    

希望这可以帮助;)

于 2013-01-18T13:51:48.983 回答
1

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

于 2013-01-18T14:52:15.393 回答
0

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

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

这将返回一个数组,如:

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

您应该能够在下拉列表中使用它。

于 2013-01-18T11:33:03.753 回答