CakePHP 2.0 - виртуальные поля не используются при поиске с опциями - PullRequest
0 голосов
/ 13 февраля 2012

Я использую CakePHP 2.0, и у меня есть модель с этим 'virtualFields':

Country.php:

var $virtualFields = array(
    'path' => "CONCAT_WS('/', dirname, basename)"
);

Если я делаю это в контроллере, который использует «Пользователь»

$users = $this->User->find('all');

установлено виртуальное поле path.

Если я использую это в моем контроллере, который также использует «Пользователь»

$options['fields'] = array(
    'DISTINCT User.*'
);
$options['joins'] = array(
    array(
        'table' => 'courses',
        'type' => 'inner',
        'conditions' => array(
            'User.id = courses.user_id'
        )
    ),
    array(
        'table' => 'times',
        'type' => 'inner',
        'conditions' => array(
            'courses.id = times.course_id'
        )
    )
);
$options['conditions'] = array(
    'times.amount > ' => 0
);

$users = $this->User->find('all', $options);

С опциями поле path не установлено, конечно, в SQL-запросе, похоже, нет включенного поля "CONCAT_WS ('/', dirname, basename)", которое включается, если я делаю find операция без опций.

Что я могу сделать с опциями, чтобы виртуальное поле автоматически включалось? Конечно, я могу написать в fields опциях CONCAT, но это не очень приятно, особенно если я его изменю.

С уважением.

1 Ответ

1 голос
/ 13 февраля 2012

Используйте group by вместо Отдельный и полностью удалите опцию полей.

$options['group'] = array(
    'User.*'
);
$options['joins'] = array(
    array(
        'table' => 'courses',
        'type' => 'inner',
        'conditions' => array(
            'User.id = courses.user_id'
        )
    ),
    array(
        'table' => 'times',
        'type' => 'inner',
        'conditions' => array(
            'courses.id = times.course_id'
        )
    )
);
$options['conditions'] = array(
    'times.amount > ' => 0
);

$users = $this->User->find('all', $options);
...