Принадлежит проблема в CakePHP и HTML выбора, я не могу понять, как это сделать - PullRequest
4 голосов
/ 30 августа 2009

Простой вопрос от тейкфп нуб:

У меня есть две модели: игрок и команда.

У команды есть id (int) и cool_name (varchar).

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

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

Итак, команда имеет много игроков, и игрок принадлежит команде.

Модель моего плеера:

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');
//...

Хорошо, у меня есть выбор с идентификаторами команд внутри; я не хочу идентификатор, но название команды, а затем сохранить идентификатор: что-то вроде (в 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') ) ) );

Ответы [ 2 ]

1 голос
/ 30 августа 2009

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

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

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

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

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

0 голосов
/ 13 декабря 2013

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

...