cakephp find ('list') - проблема с использованием - PullRequest
0 голосов
/ 09 июня 2010

Я пытаюсь получить массив для заполнения выбора округов. Если я использую 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 ОТ events AS Event ГДЕ display = 1 И TO_DAYS (event_finish)> = TO_DAYS (NOW ()) ORDER BY venue_county DESC

, который генерирует ошибку, потому что сначала вставляет в запрос поле Event. id, которое не требуется и вызывает ошибку.

В моей базе данных есть одна таблица для событий, которая включает адрес места проведения, и я не хочу создавать другую таблицу для адреса.

Какие варианты я должен использовать для вызова find ('list')?

Ответы [ 3 ]

3 голосов
/ 09 июня 2010

«список» ожидает 2 поля - одно для идентификатора, а другое для текстовой метки. Если вы используете только один, он получает текущий идентификатор модели для поля IF. Вот как это должно выглядеть:

$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" и т. Д. Расположены слева (как в моем примере поле display ).

По сути, вы можете изменить поля, но сначала нужно указать идентификатор, а следующее - текстовое

1 голос
/ 09 июня 2010

попробуйте указать поля для списка

<?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 против и НЕ (я бы рекомендовал сделать это поле типа tinyint (1), так что это в основном true / false).

<?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 голосов
/ 23 января 2014

Надеюсь, это сработает.

$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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...