CakePHP показывает данные из другой связанной таблицы в выпадающем списке - PullRequest
0 голосов
/ 10 сентября 2011

Я создал приложение CakePHP, которое создает встречи, для которых назначен клиент и врач из других таблиц в базе данных.

На экране добавления встречи я хочу иметь возможность выбрать имя доктора из выпадающего списка (обратите внимание, что имя состоит из двух полей, имени и фамилии, и они также являются полем с названием title для префикса, например, Mr). Однако информацию, которую он ДОЛЖЕН сохранить, это doctor_id, поскольку именно так связаны две таблицы!

Я добавил следующее на мой взгляд:

<?php echo $this->Form->input('doctor_id',array('label'=>'<strong>Choose Doctor</strong>'),$doctors); ?>

и затем в моем контроллере:

$this->set('doctors', $this->Appointment->Doctor->find('list'));

Однако это создает список случайных элементов из базы данных. Как я могу заставить это работать? Итак, выпадающий список выглядит примерно так:

<select>
<option value="1">Mr. John Doe</option>
<option value="2">Mrs. Jane Doe</option>
</select>

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Вы можете указать поля, которые вы хотите отобразить в раскрывающемся списке, добавив параметр 'fields' в find (), и вы можете использовать virtualField в своей модели Doctor, чтобы получить имя (или полное имя).

doctor.php:

public function __construct($id = false, $table = null, $ds = null) {
    parent::__construct($id, $table, $ds);

    // This is for MySQL, change for whatever DB flavour you're using.
    $this->virtualFields = array(
      'name' => "CONCAT(`{$this->alias}`.`prefix`, ' ', `{$this->alias}`.`firstname`, ' ', `{$this->alias}`.`lastname`)"
  );
}

Измените свою находку ('список') в вашем контроллере на:

$this->set('doctors', $this->Appointment->Doctor->find(
  'list',
  array(
    'fields' => array('Doctor.name')
  )
);

Вы, конечно, можете добавить параметр 'order'...

$this->set('doctors', $this->Appointment->Doctor->find(
  'list',
  array(
    'fields' => array('Doctor.name'),
    'order' => array('Doctor.firstname', 'Doctor.lastname')
  )
);

Надеюсь, это поможет.

1 голос
/ 10 сентября 2011

они не случайные.

, но вы бы хотели использовать "order" => array ('id' => 'ASC') в вашем методе find (), чтобы отсортировать их по id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...