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
,但有一个名为title
或name
的字段,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的主要内容,如果未能解决你的问题,请参考以下文章