Я использую CakePHP 1.3 для извлечения данных из таблицы с Города а также Почтовые индексы и я хотел бы извлечь эти два столбца, чтобы заполнить раскрывающееся меню с почтовыми кодами, как идентификатор меню а также названия городов как меню ‘ценности’.
«найти («список»)”Метод недоступен, потому что некоторые города имеют одинаковые почтовые индексы, а класс выбирает только уникальные значения, поэтому вместо получения:
Array
(
[800] => Darwin
[801] => Darwin
[810] => Allawa
)
я получаю
Array
(
[800] => Darwin
[810] => Allawa
)
Метод find (‘all’) возвращает многомерный массив
Array
(
[0] => Array
(
[GeoPostcode] => Array
(
[state_id] => 26
[region] => Acton
)
)
[1] => Array
(
[GeoPostcode] => Array
(
[state_id] => 26
[region] => Ainslie
)
)
)
Как лучше всего обойтись, чтобы получить нужные данные в одномерном массиве, не сводя вывод к уникальным ключам массива? Что-то вроде :
Array ( [800] => Darwin [801] => Darwin [810] => Allawa )
Вы все еще должны быть в состоянии сделать это с $Model->find('list')
,
$this->Model->find(
'list',
array(
'fields' => array(
'postal_code',
'city_name'
),
'contain' => false
)
);
Это должно вернуть набор результатов списка, используя два поля, которые вы выбрали (почтовый индекс и название города).
Ваш альтернативный вариант, это сделать find('all')
:
$results = $this->Model->find(
'all',
array(
'conditions' => array( ... )
)
);
Теперь у вас есть этот формат в ваших данных результатов:
$results = Array
(
[0] => Array
(
[ModelName] => Array
(
[id] => 1
[postal_code] => 800,
[city_name] => 'Darwin'
)
)
[1] => Array
(
[ModelName] => Array
(
[id] => 2
[postal_code] => 801,
[city_name] => 'Darwin'
)
)
[2] => Array
(
[ModelName] => Array
(
[id] => 3
[postal_code] => 810,
[city_name] => 'Allawa'
)
)
)
Затем используйте Set
класс в Cake для извлечения некоторых данных:
$keys = Set::extract('/ModelName/postal_code', $results);
$values = Set::extract('/ModelName/city_name', $results);
/* Then some array_combine magic */
$list = array_combine($keys, $values);
Теперь у вас есть массив, который вы хотите. Хотя и дольше, но это работает. Затем вы можете передать эту переменную Form::select()
помощник, чтобы создать свой выпадающий.
Надеюсь это поможет!
Других решений пока нет …