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

Ran*_*all 3 php select cakephp

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

我已阅读了大量文档,并成功设置了selectuser表中输出选项,但它同时使用user.id了值和选项文本.

控制器:

    $this->set('users', $this->Profile->User->find('list'));
Run Code Online (Sandbox Code Playgroud)

视图:

    echo $this->Form->input('user_id');
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

AD7*_*six 6

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

find('list')默认情况下,将使用主键作为键,将模型displayField作为值.

如果模型没有一个明确的displayField,但有一个名为场titlename蛋糕将自动选取这个领域,否则将无法猜测,只是使用的主键字段-这是正在发生的事情的问题.

但是,您只需在find('list')通话结果中指定所需的字段即可.因此:

设置模型displayField

class User extends AppModel {

    public $displayField = 'username';

}
Run Code Online (Sandbox Code Playgroud)

然后使用:

$users = $this->User->find('list');
Run Code Online (Sandbox Code Playgroud)

明确选择字段

$users = $this->User->find('list', array(
    'fields' => array('id', 'username')
));
Run Code Online (Sandbox Code Playgroud)

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

array(
    1 => 'firstuser',
    ...
    76 => 'AD7six'
)
Run Code Online (Sandbox Code Playgroud)

  • 也删除了我的答案.自我提示:不要写太多的深夜答案,不要在我的电脑后面而不是在iPad上做:)谢谢,@ ad7six (2认同)