web-dev-qa-db-ja.com

cakephp 3.0idの代わりに値を選択フィールドに入力する方法

私は以前の答えを探していましたが、私が見つけたものは古い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'
]);
_
18
drmonkeyninja

これは実際に私を助けました。

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

選択したオプションを月のヘルパーに表示

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