【发布时间】:2013-05-09 23:57:41
【问题描述】:
我在使用 Cakephp 时经常遇到这种困境,我很确定这是我没有遵循/理解某处约定的结果。在任何类型的belongsTo(hasAnd 或其他)中,我通常发现由于id 往往是外键,它最终也会成为下拉菜单中显示的内容,这当然在语义上是无用的。
这是我通常所做的一个示例;我希望有人能让我直截了当:(我只是编造这些表格,因为它们为一般问题提供了一个很好的模板。)
假设:
Users 表有列id|firstname|lastname
Accounts 拥有id|user_id
(我所做的一切都不是这么简单,但这是问题的一般形式)
使用cake bake all,我的Accounts/add 视图会为user_id 构建一个下拉列表,该下拉列表实际上会显示ID 号。我已经找到了几种解决方法,但它们基本上都涉及我自己组装信息。我要么通过在控制器中为user_id 的Accounts/add 下拉列表构建一个$options 数组来完成它,如下所示:
控制器
$users = $this->Account->User->find('list');
$options = Set::combine($users, '{n}.User.id', array('{0} {1}', '{n}.User.firstname', '{n}.User.lastname'));
查看
echo $this->Form->input('user_id', array(
'div' => array( 'id' =>'UserId'),
'options'=>$options,'type'=>'select'
) )."\n\n";
或者通过:
控制器
$users = $this->Account->User->find('all', array('recursive' => 1) );
然后以几乎相同的方式在视图中解析数据。在这两种情况下,我一直坚信我可以以一种解决这个问题的方式来构建我的模型——这似乎太基本了,这样一个广泛的框架没有解决这个需求。
【问题讨论】:
-
您需要更改模型中的 $displayField 并且应该返回带有 find('list') 的适当数组
-
搞笑。我知道这会很容易。谢谢你。你知道如何处理
firstname和lastname这样的情况吗?我可以以某种方式轻松地将它们连接起来吗?我刚刚尝试array('firstname', 'lastname')无济于事。 : /
标签: cakephp cakephp-2.0 cakephp-2.3