Динамическая привязка раскрывающегося списка выбора в cakephp

Привет, ребята, я создаю форму с помощью cakephp. Здесь я использовал раскрывающийся список выбора. Этот раскрывающийся список заполняется из базы данных. У меня есть две таблицы: Филиал и Сотрудник. PrimaryContactID в таблице Branch является внешним ключом. Этот раскрывающийся список выбора заполняется идентификатором сотрудника из таблицы сотрудников (на данный момент). Но мне нужно, чтобы в раскрывающемся списке отображалось имя, и при сохранении я должен сохранить идентификатор.

Вот как я написал:

controller:
public function add()
    {
        $branch = $this->Branch->newEntity();
        if ($this->request->is('post')) {
            $branch = $this->Branch->patchEntity($branch, $this->request->data);
            if ($this->Branch->save($branch)) {
                $this->Flash->success(__('The branch has been saved.'));

                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('The branch could not be saved. Please, try again.'));
            }
        }
        $employee = $this->Branch->Employee->find ( 'list', [ 
                'limit' => 200 
        ] );
        $this->set(compact('branch', 'employee'));
        $this->set('_serialize', ['branch']);
    }
BranchTable.php:
class BranchTable extends Table
{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('branch');
        $this->displayField('BranchID');
        $this->primaryKey('BranchID');

        $this->addBehavior('Timestamp');

        $this->belongsTo('Employee', [
                'foreignKey' => 'EmployeeID',
                'joinType' => 'INNER'
        ]);
    }
}
  add.ctp:
<div class="branch form large-9 medium-8 columns content">
    <?= $this->Form->create($branch) ?>
    <fieldset>
        <legend><?= __('Add Branch') ?></legend>
        <?php
            echo $this->Form->input('BranchName');
            echo $this->Form->input('BranchCode');
            echo $this->Form->input('Address');
            echo $this->Form->input('Telephone');
            echo $this->Form->input('PrimaryContactID', ['options' => $employee]);
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end() ?>
</div>

На данный момент раскрывающийся список заполнен значениями EmployeeID. Мне нужно, чтобы у меня были как EmployeeID, так и EmployeeName. Когда я щелкаю раскрывающийся список, я должен увидеть имя сотрудника, и при сохранении я должен сохранить идентификатор.

Как это сделать? Какие все изменения я должен сделать?


person SSS    schedule 30.08.2016    source источник


Ответы (1)


При вызове списка вы можете настроить поля, используемые для ключа и значения, с параметрами keyField и valueField соответственно:

$employee = $this->Branch->Employee->find('list', [ 
    'keyField' => 'EmployeeID',
    'valueField' => 'EmployeeName',
    //'limit' => 200
]);

Подробнее о том, как получить данные и результаты:

http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

person Salines    schedule 30.08.2016
comment
Спасибо, это работает. У меня есть еще одно сомнение, вы можете помочь мне с этим? - person SSS; 30.08.2016
comment
Да, ждем 90 минут. - person SSS; 30.08.2016
comment
Я спросил об этом, пожалуйста, проверьте: title="отображать данные из двух разных таблиц в индексе с помощью cakephp">stackoverflow.com/questions/39225722/ - person SSS; 30.08.2016
comment
Я разместил вопрос: stackoverflow.com/questions/39225722/ - person SSS; 30.08.2016