я искал предыдущий ответ, но те, что я нашел, связаны с более старыми версиями 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 ]);