2010-06-09 104 views
0

的問題我試圖讓一個數組來挑選一個Counties選擇。如果我使用find('all'),我可以獲取數據,但是這個數組需要在$ form-> input($ counties)的視圖中展開使用。cakephp find('list') - 使用

如果我使用find('list'),我似乎無法得到正確的數組 - 這是縣名的簡單數組。

我曾嘗試是這樣的:

 $ops=array(
     'conditions' => array(
      'display' => '!=0', 
      'TO_DAYS(event_finish) >= TO_DAYS(NOW())' 
     ), 
     'fields' => 'DISTINCT venue_county', 
     'order' => 'venue_county DESC' 
    ); 
    $this->set('counties', $this->Event->find('list',$ops)); 

但這生成SQL是:

選擇Eventid,DISTINCT Eventvenue_county FROM events AS Event WHERE display = 1 AND TO_DAYS(event_finish)> = TO_DAYS(NOW())ORDER BY venue_county DESC

,因爲它首先將Event,其產生錯誤。查詢中的id字段 - 這是不需要的並導致錯誤。

在我的數據庫中,我有一個包含場地地址的事件表,我不想爲地址創建另一個表。

我應該使用efor find('list')調用哪些選項?

回答

3

「列表」期望2個字段 - 一個用於ID,另一個用於Text標籤。如果您只使用一個,它會獲得IF字段的當前型號ID。這是應該的樣子:「=」

$ops=array(
    'conditions' => array(
     'display !=' => 0, 
     'TO_DAYS(event_finish) >= TO_DAYS(NOW())' 
    ), 
    'fields' => array('venue_county', 'venue_county'), 
    'order' => 'venue_county DESC', 
    'group'=>'venue_county' 

); 
$this->set('counties', $this->Event->find('list',$ops)); 

記住,就像「>」,「喜歡」,「IN」等條件,從左側在我的例子放置(如display field)。

基本上你可以改變字段,但第一個必須是ID一個下一個需要在文字中的一個

+0

非常感謝您的明確解釋。 – Owen 2010-06-10 10:39:21

+0

如果我不想從數據庫中選擇一個選項,例如「請選擇」作爲默認選擇,該怎麼辦? – Owen 2010-06-10 13:07:58

+0

啊,發現它... http://book.cakephp.org/view/201/options-empty – Owen 2010-06-10 13:14:05

1

嘗試列表

<?php 
$this->set('counties', $this->Event->find('list',array(
    'conditions' => array(
     'NOT' => array('display' => 0), 
     'TO_DAYS(event_finish) >= TO_DAYS(NOW())' 
    ), 
    'fields' => array('Event.venue_county','Event.venue_county'), 
    'order' => 'venue_county DESC' 
))); 
?> 

指定的領域,雖然我可能會建議你在本地執行日期條件(假設[event_finish]字段是數據或日期時間字段)。當你在它的時候,你可能會簡化顯示字段的條件爲IS和IS NOT(我建議將該字段作爲tinyint(1)類型,所以它基本上是真/假)。

<?php 
$this->set('counties', $this->Event->find('list',array(
    'conditions' => array(
     'display' => 1, 
     'Event.event_finish >' => date('Y-m-d 00:00:00'), 
    ), 
    'fields' => array('Event.venue_county','Event.venue_county'), 
    'order' => 'venue_county DESC' 
))); 
?> 
+0

感謝您的例子 - 並感謝您的額外提示 - 我會盡我所能:-) – Owen 2010-06-10 10:29:44

+0

我注意到這個SQL自動包含GROUP BY,而不必指定這個條件(我在我的原始代碼中添加了DISTINCT)。這很好,但有點可怕,因爲我不知道它在什麼情況下增加了它。你知道它正在使用什麼規則或者添加了哪些其他情況? – Owen 2010-06-10 10:44:42

+0

評論:http://book.cakephp。org/view/1017 /正在檢索你的數據 至於組自動 - 我沒有注意到,這可能是因爲兩個字段是相同的,所以它不必返回更多的行它需要,但我沒有真正考慮過它,也沒有發現任何問題(查找)(列表)...適合我。 如果您想要確保排除其他鏈接模型,您可以將"recursive' => -1添加到查找選項。 – zeroasterisk 2010-06-10 19:42:30

0

希望這會起作用。

$ops=array(
    'conditions' => array(
     'display' => '!=0', 
     'TO_DAYS(event_finish) >= TO_DAYS(NOW())' 
    ), 
    'fields' => array('id','venue_county'), 
    'order' => 'venue_county DESC' 
); 
$this->set('counties', $this->Event->find('list',$ops));