【问题标题】:Create a dropdown from multiple tinyint(1) fields in CakePHP从 CakePHP 中的多个 tinyint(1) 字段创建下拉列表
【发布时间】:2011-08-24 08:12:57
【问题描述】:

目前我让我的用户选择他们希望他们的活动如何重复:每天、每月、每周或每年。

我的数据库中有这些作为 tinyint(1) 字段。所以 - 它们在页面上作为复选框,我使用 javascript 来捕捉用户点击一个,并取消选中其余部分。没什么大不了的,而且工作得很好。

TLDR: 我希望能够将它们放在下拉列表中。有没有办法将多个 tinyint(1) 字段转换为单个下拉列表?还是我只需要手动完成(与数据库字段无关的 HTML 表单字段),然后在数据进入控制器时对其进行转换?

【问题讨论】:

    标签: php forms cakephp cakephp-1.3


    【解决方案1】:

    您可以为事件重复周期创建一个“重复”表。该表将有一个 id 和一个 name 字段。然后,在您的事件字段中,创建一个 repeating_id 字段。您现在可以为您的重复表创建一个模型,并使用标准的 CakePHP 约定通过将表上的“列表”操作的结果传递到您的视图来填充表单。

    我使用 CakePHP 的次数越多,我就越发现以这种方式接近解决方案更容易创建和维护。

    【讨论】:

    • 有时最简单的解决方案是我忽略的第一个。 :( 谢谢!在确定“最佳”答案之前,我将等待对上述解释的解释,但我已经实现了这个,并且它按预期工作 - 谢谢!
    【解决方案2】:

    在您的控制器中:

    $this->set('fields',Set::extract('/COLUMNS/Field', $this->Model->query("DESCRIBE {$this->Model->useTable}")));
    

    在你看来:

    $this->Form->input('yourdropdown', array('options' => $fields));
    

    【讨论】:

    • 这看起来很有趣,但我并不完全理解 - 你能提供一些解释吗?
    【解决方案3】:

    将其转换为单个 ENUM 字段? repeats enum('daily', 'monthly', 'weekly', 'yearly', 'none') 之类的就可以了。

    【讨论】:

    • 这看起来很棒 - 我以前从未使用过 ENUM 字段。关于融入 Cake 的最佳方式有什么想法吗?
    • 我从来没有用过 cake,但创建一个下拉列表的值应该与你在枚举字段中输入的名称相匹配。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多