代码之家  ›  专栏  ›  技术社区  ›  apelliciari

属于CAKEPHP和HTML选择中的问题,我无法理解如何做到这一点

  •  4
  • apelliciari  · 技术社区  · 16 年前

    一个简单的问题:

    我有两种模式,球员和球队。

    团队有一个id(int)和一个酷的名字(varchar)。

    player有id(int)、cool_name(varchar)和team表的引用team_id(int)。

    因为没有英文表,所以我不能使用字段名。

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

    我的玩家模型:

    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的select;我不需要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') ) ) );
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   Rob Wilkerson    16 年前

    因为你在做 find( 'list' ) 反对你 Team 这个模型有一个 name 属性(cakephp默认将其识别为显示字段),您应该得到的是一个关联数组,其中键是团队id,值是团队名称。再加上你在一个名为 teams 蛋糕将为你做这项工作。

    以你的形式,我不知道在哪里 'squadra_id' 来自,但是改成 'teams' 您应该可以很好地看到select列表的填充:

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

    如果我理解正确的话,除了视图中的输入定义之外,您拥有一切正确的东西来启用这个“魔法”。你可以阅读更多关于如何使用 查找('list') 自动填充选择框的步骤 http://book.cakephp.org/view/189/Automagic-Form-Elements .

    希望这有帮助。

        2
  •  0
  •   user361697    12 年前

    数据无法用belongsto模型进行验证!我可以使用TeavyID,它工作!!