В функции cakePHP find () как включить константу? - PullRequest
1 голос
/ 10 августа 2011

Я хочу построить SQL-запрос примерно так:

"SELECT email.member_id, 1 FROM email ... "

Я использую

$this->Email->find('list', array(
  'fields' => array('Email.member_id', '1'), ...

CakePHP генерирует:

SELECT `Email`.`member_id`, `Email`.`1` FROM `emails` AS `Email` ...

Как мне указать, что 1 является константой, а не полем базы данных?

Почему я хочу это сделать

Я в основном хочу вернуть ассоциативный массив с ключами member_id и значениями 1. Было бы лучше просто получить прямой массив member_ids и затем преобразовать его в мою требуемую структуру данных? Я думал, что это будет быстрее.

1 Ответ

4 голосов
/ 10 августа 2011

Торт не позволяет это легко.В вашем конкретном случае мне было бы интересно, почему вы все равно хотите иметь постоянное поле.Но в целом для подобных вещей вы должны использовать виртуальные поля:

http://book.cakephp.org/view/1608/Virtual-fields

В основном вы бы изменили модель Email, добавив:

var $virtualFields = array(
   'one' => '1'
);

Теперь вы можете выполнить запрос следующим образом:

$this->Email->find('list', array(
  'fields' => array('Email.member_id', 'Email.one'), ...

Для добавленного вами варианта использования вы должны просто получить прямой массив идентификаторов и заполнить его впоследствии.Это будет не только быстрее, но и менее хакерски => легче понять.Вы можете сделать это легко с помощью ´array_fill_keys () ´ .

...