2011-05-12 37 views
0

目前,我让我的用户选择他们想要重复的事件的方式:每日,每月,每周或每年。在CakePHP中创建多个tinyint(1)字段的下拉菜单

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

TLDR: 我希望能够让他们在下拉代替。有没有办法将多个tinyint(1)字段转换为单个下拉菜单?或者我只需要手动执行(HTML表单字段与数据库字段无关),然后在数据进入控制器时进行转换?

回答

1

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

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

+0

有时最简单的解决方案是我忽略的第一个解决方案。 :(谢谢!在我确定“最佳”答案之前,我会等待上面的解释,但是我已经实现了这一点,并且按预期工作 - 谢谢! – Dave 2011-05-12 20:09:58

1

在你的控制器:

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

在你看来:

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

这看起来很有趣,但我不完全遵循 - 你能提供一些解释吗? – Dave 2011-05-12 18:06:42

0

将其转换为一个ENUM场? repeats enum('daily', 'monthly', 'weekly', 'yearly', 'none')或有些人会这样做。

+0

这看起来很棒 - 我以前从未使用过ENUM字段。任何关于融入Cake的最佳方式的想法? – Dave 2011-05-12 18:06:10

+0

我从来没有用过蛋糕,但不应该太难以创建一个与您放入枚举字段中的名称相匹配的值的下拉菜单。 – 2011-05-12 18:09:28