2016-08-30 5 views
0

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

Это, как я уже писал:

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. Когда я нажимаю раскрывающийся список, я должен увидеть EmployeeName, и при сохранении я должен сохранить идентификатор.

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

ответ

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

+0

Спасибо, что работает. У меня есть еще одно сомнение, вы можете мне помочь? – SSS

+0

Добавить новый вопрос – Salines

+0

Да, в ожидании 90 минут. – SSS

0
//write your query like this 

$employee = $this->Branch->Employee->find('list')->select(['EmployeeID','EmployeeName'])); 
Смежные вопросы