CakePHP表单选择值为table.id,选择选项文本为table.textfield

时间:2013-03-17 18:18:38

标签: php cakephp select

我是Cake的新手。我已经设置了一些东西,相关的是"用户"和#"个人资料"表,控制器,模型和视图。在我的profiles/add视图中,我尝试输出select输入,其值为user.id,选项文本为user.username。最终,值user.id将保存在profile.user_id

我已阅读了大量文档,并成功设置select以从user表中输出选项,但它使用user.id作为值和选项文本。

控制器:

    $this->set('users', $this->Profile->User->find('list'));

查看:

    echo $this->Form->input('user_id');

看起来这种事情是常规的,所以如果我完全忽视它,请随意回答文档的链接。

谢谢!

1 个答案:

答案 0 :(得分:6)

  

成功设置了select以从用户表中输出选项,但它使用user.id作为值和选项文本。

默认情况下,

find('list')将使用主键作为键,并将模型的displayField作为值。

如果模型没有明确的displayField,但有一个名为titlename的字段,Cake会自动选择此字段,否则它将无法猜测并仅使用主要字段关键领域 - 这就是问题中发生的事情。

但是,您可以在find('list')来电的结果中指定所需的字段。因此:

设置模型displayField

class User extends AppModel {

    public $displayField = 'username';

}

然后使用:

$users = $this->User->find('list');

明确选择字段

$users = $this->User->find('list', array(
    'fields' => array('id', 'username')
));

在这两种情况下 - 结果将是例如:

array(
    1 => 'firstuser',
    ...
    76 => 'AD7six'
)