2011-05-12 123 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