2010-06-09 108 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));