我正在尝试使用一个阵列来填充一个县选择。如果我使用find('all')我可以得到数据,但是这个数组需要展平才能在视图中使用$ form-> input($ counties)。
如果我使用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是:
SELECT Event
。id
,DISTINCT Event
。venue_county
FROM events
AS Event
WHERE display
= 1和TO_DAYS (event_finish)> = TO_DAYS(NOW())ORDER BY venue_county
DESC
会生成错误,因为它首先在查询中插入Event
。id
字段 - 这是不需要的并导致错误。
在我的数据库中,我有一个事件表,包括场地地址,我真的不想创建另一个地址表。
我应该在查找('列表')电话中使用哪些选项?
答案 0 :(得分:3)
'list'需要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));
请记住,“>”,“!=”,“LIKE”,“IN”等条件是从左侧放置的(就像在我的示例中的显示字段)。
基本上你可以改变字段但是第一个需要是ID,下一个需要是TEXT
答案 1 :(得分: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 vs.和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'
)));
?>
答案 2 :(得分: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));