CakePHP3のkeyFieldとvalueFieldを使ってカラムに対応するカラムの値を取得する方法

CakePHP3のkeyFieldとvalueFieldを使ってカラムに対応するカラムの値を取得する方法

12 回閲覧されました

みなさんこんにちは、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] || '');
})

これでリストから名前を選択するとあだ名のリストが表示されます。