HABTM выпадающие элементы не выбраны
Я создал интересный сайт для изучения CakePHP, но по какой-то причине я не могу получить раскрывающийся список с множественным выбором для отображения выбранных предметов. В этом примере 1 видеоигра может иметь несколько сложностей (легкая, нормальная, сложная). На моей странице редактирования игры у меня есть поле для выбора, чтобы выбрать трудности. Это показывает все три трудности, и я могу выбрать их, и это сохраняет правильно. Однако, когда я возвращаюсь на страницу редактирования, ранее сохраненные элементы не отображаются как выделенные. Я проверил, что записи правильно сохраняются в базе данных.
Таблицы: игровые трудности, трудности_игры
Модели:
class Game extends AppModel {
public $actsAs = array('Containable');
public $hasAndBelongsToMany = array(
'Difficulty' =>
array(
'className' => 'Difficulty',
'joinTable' => 'difficulties_games',
'foreignKey' => 'game_id',
'associationForeignKey' => 'difficulty_id',
'unique' => 'true'
)
);
}
class Difficulty extends AppModel {
public $actsAs = array('Containable');
public $hasAndBelongsToMany = array(
'Game' =>
array(
'className' => 'Game',
'joinTable' => 'difficulties_games',
'foreignKey' => 'difficulty_id',
'associationForeignKey' => 'game_id',
'unique' => 'true'
)
);
}
контроллер:
$game = $this->Game->findById($id);
$this->set('difficulties', $this->Game->Difficulty->find('list'));
Просмотр (edit.ctp):
echo $this->Form->input('Difficulty');
Это должно быть что-то простое, что я упускаю, но я прочитал книгу по HABTM и искал здесь и не мог найти много на полях с несколькими вариантами выбора.
ОБНОВИТЬ:
Вот вся функция редактирования в контроллере:
public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$game = $this->Game->findById($id);
if (!$game) {
throw new NotFoundException(__('Invalid post'));
}
if ($this->request->is('post') || $this->request->is('put')) {
$this->Game->id = $id;
if ($this->Game->saveAll($this->request->data)) {
$this->Session->setFlash('Your game has been updated.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash($this->Game->invalidFields());
}
}
if (!$this->request->data) {
$this->request->data = $game;
}
$this->set('systems', $this->Game->System->find('list'));
$this->set('genres', $this->Game->Genre->find('list'));
$this->set('difficulties', $this->Game->Difficulty->find('list'));
}
Также вот еще немного о Представлении:
echo $this->Form->create('Game');
echo $this->Form->input('name');
echo $this->Form->input('system_id');
echo $this->Form->input('genre_id');
echo $this->Form->input('Difficulty');
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->end('Save Game');