首页 文章

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

提问于
浏览
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
    - ...

当然,原因是,不可能选择一个组项 .

提前致谢!

3 回答

  • 1

    好的,经过一些更多的研究,我最终得到了答案 . 这是要添加到 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
    ));
    

    希望这可以帮助;)

  • 0

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

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

    这将返回一个数组,如:

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

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

  • 2

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

相关问题