私は以前の答えを探していましたが、私が見つけたものは古いcakephpバージョンに関連しています
「magazines」と「issues」の2つのテーブルがあり、「issues」「BelongsTo」「magazines」という関係があります。IssuesTableは次のようになります。
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
テーブルマガジンには、magazines.idとmagazines.nameの2つのフィールドがあります。
テーブルissuesには、issues.id、issues.magazine_idの2つのフィールドがあります。ここで、issues.magazine_idは外部キーです。
課題ビューの選択入力にmagazine.name値を入力し、issues.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]);
?>
しかし、magazines.nameの代わりにissues.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
]
);
_
詳細については、 docs を参照してください。
更新
find('list')
で問題が発生している場合は、モデルのdisplayField
が正しく設定されていない可能性があります。 Cakeは通常、初期化時にモデルの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->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
選択したオプションを月のヘルパーに表示
$this->Form->month('students.month', [
'label' => false,
'value'=>date('m'),
'required'=>true
]);