Простой вопрос от 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, и это работает!