【问题标题】:Cakephp 2.3: How to not use 'id' as the label of $belongsTo <select> optionsCakephp 2.3:如何不使用 'id' 作为 $belongsTo <select> 选项的标签
【发布时间】: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_idAccounts/add 下拉列表构建一个$options 数组来完成它,如下所示:

控制器

$users = $this-&gt;Account-&gt;User-&gt;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-&gt;Account-&gt;User-&gt;find('all', array('recursive' =&gt; 1) );

然后以几乎相同的方式在视图中解析数据。在这两种情况下,我一直坚信我可以以一种解决这个问题的方式来构建我的模型——这似乎太基本了,这样一个广泛的框架没有解决这个需求。

【问题讨论】:

  • 您需要更改模型中的 $displayField 并且应该返回带有 find('list') 的适当数组
  • 搞笑。我知道这会很容易。谢谢你。你知道如何处理firstnamelastname 这样的情况吗?我可以以某种方式轻松地将它们连接起来吗?我刚刚尝试array('firstname', 'lastname') 无济于事。 : /

标签: cakephp cakephp-2.0 cakephp-2.3


【解决方案1】:

对于单列表,简单的 $displayField = 'column_name' 就是答案。

但是对于列的连接,涉及到更多的代码:

public $virtualFields = array("full_name"=>"CONCAT(first_name, ' ' ,last_name)");
public $displayField = 'full_name';

如果它是一个非常复杂的 $displayField,可能需要一个 afterFind 解决方案,但大多数情况下这是解决方案。

希望对您有所帮助。

【讨论】:

  • 你是王子,这太完美了。周四面谈。 ;)
猜你喜欢
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多