4

cakephp noob 提出的简单问题:

我有两个模型,玩家和团队。

Team 有一个 id (int) 和一个 cool_name (varchar)。

Player 有一个 id (int)、一个 cool_name (varchar) 和一个对 team 表的引用 team_id (int)。

Cool_name 而不是 name,因为我没有英文表格,所以我不能使用“name”字段。

所以,一个球队有很多球员,一个球员属于球队。

我的播放器型号:

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

(团队模型里面除了名字什么都没有)

玩家控制器:

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 的选择;我不想要 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') ) ) );
4

2 回答 2

1

由于您正在find( 'list' )对您的Team模型进行操作并且该模型具有一个name属性(默认情况下,CakePHP 将其识别为显示字段),因此您应该得到一个关联数组,其中键是团队 ID,值是团队姓名。再加上您将该数组设置在一个名为的变量中teams,Cake 将为您完成工作。

在您的表单中,我不确定'squadra_id'来自哪里,但是将其更改为'teams',您应该会看到选择列表很好地填充:

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

如果我对您的理解正确,那么除了您视图中的输入定义之外,您拥有启用此“魔术”的一切正确的东西。您可以在http://book.cakephp.org/view/189/Automagic-Form-Elements阅读有关如何使用find( 'list' )自动填充选择框的更多信息。

希望这可以帮助。

于 2009-08-30T13:16:12.637 回答
0

数据没有通过 belongsTo 模型得到验证!我可以使用和 team_id 并且它有效!

于 2013-12-13T12:35:58.773 回答