cakephp 3.0 как заполнить поле select со значениями вместо id

я искал предыдущий ответ, но те, что я нашел, связаны с более старыми версиями cakephp

У меня есть две таблицы: «журналы» и «проблемы», где есть «проблемы» в журналах BelongsTo, вот что выглядит «Проблемная таблица»:

public function initialize(array $config){ $this->belongsTo('Magazines', [ 'foreignKey' => 'id' ]); } 

В журналах журналов есть два поля: journs.id и journ.name

table issues имеет два поля: issues.id, issues.magazine_id, где issues.magazine_id – это внешний ключ

чтобы заполнить выбранный вход в представлении проблем значениями журнала.name и сохранить проблемы.magazine_id, я установил контроллер следующим образом

 $this->set('magazines', $this->Issue->Magazine->find('list')); 

то я добавил следующий код в представление вопроса add.cpt

  <?php echo $this->Form->input('name', [ 'type' => 'select', 'multiple' => false, 'options' => $magazines, 'empty' => true]); ?> 

но я получаю выбор ввода с вопросами.magazine_id как значения вместо журналов.

спасибо за вашу помощь и комментарии

Вы хотите использовать find('list') как это возвращает первичный ключ и поле отображения: –

 $this->set( 'magazines', $this->Issues->Magazines->find('list') ); 

Затем в вашей форме вам нужно ввести имя для magazine_id если вы хотите установить внешний ключ для ассоциации: –

 echo $this->Form->input( 'magazine_id', [ 'type' => 'select', 'multiple' => false, 'options' => $magazines, 'empty' => true ] ); 

Дополнительную информацию см. В документах .

Обновить

Если у вас проблемы с find('list') возможно, потому, что displayField вашей модели не устанавливается правильно. Торт обычно определяет displayField для модели при инициализации. Если это не работает или вы хотите другое поле, вы можете установить это вручную в методе initialize() модели. Например : –

 class MagazinesTable extends Table { public function initialize(array $config) { $this->displayField('name'); } } 

Изменение 'name' в соответствующее поле.

Кроме того, вы можете выбрать, какое поле Cake будет использовать для значений, возвращаемых find('list') (это особенно полезно, если вы хотите переопределить displayField по умолчанию). Например : –

 $this->Issues->Magazines->find('list', [ 'keyField' => 'id', 'valueField' => 'name' ]); 

Отобразить выбранную опцию в помощнике месяца

 $this->Form->month('students.month', [ 'label' => false, 'value'=>date('m'), 'required'=>true ]);