2016-08-30 3 views
0

Я много раз искал этот вопрос, и ни один из признанных ответов не работает для меня. Я хочу заполнить выпадающий список выбора в моем представлении из другой модели. По какой-то причине на данный момент отображается только последняя запись. У меня есть одно рабочее решение, но код длинный и уродливый, и я знаю, что должен быть лучший способ. В моем EventsController я следующий кодКак сделать выпадающий список CakePHP

$this->loadModel('Guests'); 
$this->set('Guests', $this->Guests->find('All',array('fields'=>array('first_name')))); 

Насколько я понимаю, это создает переменные гость, что это массив, содержащий первые имена гостей на мероприятие. Затем в моих Events/index.ctp у меня есть следующий код для создания выпадающего списка. Первый пример работает, но длинный и уродливый. Следующие три примера - все ответы, которые я нашел здесь, но ни один из них не дает желаемого результата. Примеры 2 и 3 показывают только последнюю запись в таблице, а в примере 4 ничего не отображается.

<---- This works ----> 

<select> 
    <?php foreach ($Guests as $Guests){ ?> 
1  <option value = "<?php echo $Guests['first_name'];?>"> <?php echo $Guests['first_name'];?></option> <?php } ?> 
</select> 

<!--This does not work--> 

    <?= $this->Form->create('Guests'); ?> 

2 <?= $this->Form->select('Guests', ['options' => $Guests['first_name']]); ?> 

3 <?= $this->Form->input('Guests', array('options' => array('Guests' => $Guests['first_name']))); ?> 

4 <?= $this->Form->input('Guests', array('options' => $Guests)); ?> 

    <?= $this->Form->end(); ?> 

Я могу видеть, что переменная передается от EventsController, просматривая переменные с панели CakePHP. Я включил скриншот этого для конформации. Screenshot of variables here. Поскольку я новичок в cakePHP, я был бы признателен за то, что кто-то подскажет, где проблема. Заранее спасибо.

+0

Как выглядит ваши отношения между событиями и гостей моделями? – Salines

+0

К ним присоединяется другая таблица, называемая приглашением. Приглашение имеет ли я INT (11) event_id INT (11) guest_id INT (11) принят TINYINT (1) – Peakapot

+0

Редактировать свой вопрос и добавить (скопировать) из вашей модели событий все отношения (hasMany, hasOne, принадлежит, ..) – Salines

ответ

0

Вместо этого используйте вместо этого find list.

Контроллер:

$this->set('guests', 
    $this->Guests->find('list', array('fields' => array('first_name'))) 
); 

Вид:

echo $this->Form->create('Guests'); 

echo $this->Form->input(
    'Guests.first_name', 
    array(
     'options' => $guests 
    ) 
); 

echo $this->Form->end(); 

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-list

+0

Раньше я использовал список поиска, пытаясь исправить эту проблему без успеха. Я скопировал ваш код в свой проект, и он выдает и выпадающий список без каких-либо данных. Если я проверяю переменную гостей, которую вы создали, я вижу, что это их, но значение каждого слота равно null. Спасибо за помощь @bill – Peakapot

+0

hm, как выглядит ваш стол 'guest'? – bill

+0

я INT 11 first_name VARCHAR (255) last_name VARCHAR (255) электронной VARCHAR (255) создано DATETIME() модифицированный DATETIME(); Так выглядит мой гостевой стол. У меня также есть таблица Invites, которая имеет event_id и guest_id как внешние ключи. Странно, потому что я могу увидеть результат поиска («Все») на панели инструментов cakePHP под переменными. Проблема заключается только в том, что последняя запись видна в раскрывающемся списке на экране. – Peakapot

0
First try to get list from table like 

1. suppose you have Users Controller and you are trying to show select option in add.ctp then create 

///in UsersController.php 

function add(){ 

$users = $this->Users->find('list', array('fields' => array('id','first_name')); 

    $this->set(compact('users')); 

} 

//in Template/Users/add.ctp (cakephp version 3) , in View/Users/add.ctp 


echo $this->Form->input('Users.user_id',array(
     'options' => $users`enter code here` 
    )); 

// when $users return an empty array this input become input type text otherwise it will be select option 
Смежные вопросы