CakePHP3のkeyFieldとvalueFieldを使ってカラムに対応するカラムの値を取得する方法
13 回閲覧されました
みなさんこんにちは、jonioです。
今回はCakePHP3で、あるカラムに対応する他のカラムの値を取得する方法について解説します。
CakePHPのバージョン
3.6で動作確認済みです。
状況
テンプレートでリストのフォームの名前を選択するとあだ名の一覧が表示されるようにします。
usersテーブルのnameカラムとadanaカラムを使います。
コントローラー
コードを下記にします。
$userData = $this->Users->find('list', [
'keyField' => 'name',
'valueField' => 'adana'
])->toArray();
$this->set(compact('userData'));
keyFieldとvalueFieldを設定することでnameカラムに対応するadanaカラムの値を取得できます。
テンプレート
コードを下記にします。
<?= $this->Form->control("name", [
'type' => 'text',
'label' => '名称',
'list' => 'name-list',
'autocomplete' => 'off',
'id' => 'name'
])?>
<?= $this->Form->control("adana", [
'type' => 'text',
'label' => 'あだな',
'id' => 'adana'
]) ?>
jQuery
コードを下記にします。
const userData = <?= json_encode($userData) ?>;
$('#name').on('input', function() {
const selectedName = $(this).val();
$('#adana').val(userData[selectedName] || '');
})
これでリストから名前を選択するとあだ名のリストが表示されます。