2016-02-04 5 views
0

У меня есть раскрывающийся список, который показывает только идентификатор строки таблицы. Мне нравится показывать несколько значений из этой таблицы пользователю в раскрывающемся списке.Выпадающие значения CakePHP 3

Нужно ли добавлять массив с колонками в переменную от контроллера или что-то в этом роде?

Edit: В функции добавить Я эту переменную

$addresses = $this->Users->Addresses->find('list', ['limit' => 200]); 

По мнению

echo $this->Form->input('address_id', ['options' => $addresses]); 

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

+1

пожалуйста, вы можете добавить код? И добавить некоторое объяснение о предполагаемом поведении? – arilia

+0

Я добавил код – xDs

+0

@dnns, вам не нужно указывать Cake, что такое массив параметров, если вы используете множественное число имени модели, как и вы. * т. е. * Cake предположит, что переменная '$ addresses' заполняет параметры для внешнего ключа' $ address_id'. Таким образом, ваш код ввода будет выглядеть как '$ this-> Form-> input ('address_id');'. Вам нужно будет только передать значение 'options' при использовании переменной, отличной от той, которую ожидает Cake (если это имеет смысл). :-) – drmonkeyninja

ответ

5

Используйте виртуальное поле:

в файле объекта Адреса вы можете сделать

function _getFullName() 
{ 
    $ret = $this->city.' '.$this->street.' '.$this->zipcode; 
    return $ret; 
} 

, а затем в контроллере вы можете сделать

$addresses = $this->Users->Addresses->find(
    'list', 
    ['limit' => 200, 'valueField' => 'full_name'] 
); 
+0

Это лучше, чем я предложил +1. Забыл о них. – Sevvlor

+0

Ницца, я думаю, что это чистый способ сделать это. Именно то, что я искал. – xDs

+0

Возможно ли получить доступ к базовой таблице адресов и поместить ее в $ ret? – xDs

0

Form::Select() нужен только один массив для отображения его значений. Он использует индекс для определения значения и значения отображаемого массива.

Что вы можете сделать, это извлечь необходимые столбцы из таблицы и использовать concat() для создания одной строки из этих двух столбцов, которые затем помещаются в массив.

В качестве альтернативы вы можете взглянуть на displayField() в классе Table, который принимает массив. Недостатком этого является то, когда вы используете $table->find('list');, вы получите что-то по линиям Sevvlor;1, что, вероятно, не то, что вы хотите.