BelongsTo проблема в cakephp и html select, я не могу понять, как это сделать

Простой вопрос от cakephp noob:

У меня две модели: Player и Team.

Команда имеет id (int) и cool_name (varchar).

У игрока есть id (int), cool_name (varchar) и ссылка для таблицы команд team_id (int).

Cool_name вместо имени, потому что у меня нет таблиц на английском языке, поэтому я не могу использовать поле 'name'.

Таким образом, команда hasMany игроков и игрок принадлежит команде.

Моя модель игрока:

class Player extends AppModel { var $name = 'Player'; var $belongsTo = array('Team'); } 

(Командная модель имеет не что иное, как имя внутри)

PlayersController:

 class PlayersController extends AppController { var $name = 'Players'; function add() { $this->set('teams', $this->Player->Team->find('list')); //then save... } 

В окне добавления игрока:

 //... echo $form->input('squadra_id'); //... 

Хорошо, поэтому у меня есть выбор с идентификаторами команды внутри; я не хочу идентификатор, но имя команды, а затем сохранить id: что-то вроде (в html)

 <select name="data[Player][team_id]" id="PlayerTeamId"> <option value="1">Cool Name 1</option> <option value="2">Cool Name 2</option> <!-- --> <option value="{team id}">{team cool name}</option> </select> 

Как я могу сделать?

  • Решение

вместо

 $this->set('teams', $this->Player->Team->find('list')); 

положи это

 $this->set('teams', $this->Player->Team->find('list', array('fields' => array('cool name') ) ) ); 

Поскольку вы выполняете find( 'list' ) сравнению с моделью вашей модели, и эта модель имеет свойство name (которое CakePHP распознает как поле отображения по умолчанию), то, что вы должны возвращать, является ассоциативным массивом, где ключ является Идентификатор команды и значение – это имя команды. Пара, что с тем, что вы устанавливаете этот массив в переменных с именем teams и Cake, сделает для вас работу.

В вашей форме я не уверен, откуда 'squadra_id' , но измените это на 'teams' и вы увидите, что список выбора заполняется красиво:

 echo $form->input( 'teams' ); 

Если я правильно вас понимаю, у вас есть все правильно, чтобы включить это «волшебство», за исключением определения ввода в вашем представлении. Вы можете больше узнать о том, как использовать find( 'list' ) для автоматического заполнения полей выбора по адресу http://book.cakephp.org/view/189/Automagic-Form-Elements .

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

Данные не проверяются с помощью модели belongsTo! Я могу использовать и team_id, и это работает!