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

Posted

技术标签:

【中文标题】CakePHP 表单选择值作为 table.id,选择选项文本作为 table.textfield【英文标题】:CakePHP form select value as table.id, select option text as table.textfield 【发布时间】:2013-03-17 18:18:37 【问题描述】:

我是 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】:

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

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

如果模型没有显式的displayField,但有一个名为titlename 的字段,Cake 会自动选择这个字段,否则它不会猜测并简单地使用主键字段 - 这就是发生在问题中。

但是,您可以在 find('list') 调用的结果中简单地指定您想要的字段。因此要么:

设置模型显示字段

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'
)

【讨论】:

为了清晰起见,必须给你这个,以及所有工作。 (这是我为此回答的第三个答案,第一个已被删除)。 提示:只有在您测试过它确实解决了问题时才接受答案 =) 其他两个答案在技术上都有效(选择了格式正确的值->文本),但在此过程中不知不觉地破坏了其他事情。我会给你 $$ 只是为了在这一点上和我一起坐在 IM 上大声笑 也删除了我的答案。给自己的提示:不要在深夜写太多答案,而是在我的电脑后面而不是在 iPad 上写:) 谢谢,@ad7six @AD7six 如此真实。只是不能原谅自己搞砸了这个基本问题:D

以上是关于CakePHP 表单选择值作为 table.id,选择选项文本作为 table.textfield的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:表单输入(呈现为选择)未正确处理 hasOne 关系

CakePHP:向表单添加字段(动态)

根据在 cakephp 中选择的值向数据库添加多行

将输入字段添加到所有表单中 - cakephp

CakePHP 3.x - 保存这些表的关联数据和表单输入

CakePHP Master/Detail 表单 - 简单问题