嗨我希望能够使用find生成一个列表,以便我可以在select helper中使用.但有一个问题.我想要获取id,名称(第一个+最后一个).那我怎么能实现呢.我希望first_name和last_name作为名称加入.我怎样才能实现它.
$this->User->find('all',array('fields' => array('first_name','last_name','id')));
Run Code Online (Sandbox Code Playgroud)
我不能使用模型过滤器和回调请建议我如何在控制器本身中执行此操作.
Tim*_*Tim 24
我认为这可以使用模型中的virtualFields和displayField属性来完成.
在您的模型中,为全名定义一个虚拟字段,如下所示:
public $virtualFields = array(
'full_name' => 'CONCAT(User.first_name, " ", User.last_name)'
);
Run Code Online (Sandbox Code Playgroud)
如果现在将displayField设置为full_name,您应该能够$this->User->find('list')使用您可以使用的方法获取用户列表,而不会出现使用Form-helper的问题.
public $displayField = 'full_name';
Run Code Online (Sandbox Code Playgroud)
... 要么:
public $displayField = 'User.full_name';
Run Code Online (Sandbox Code Playgroud)
id会自动获取.
Doo*_*taz 16
另一个解决方案是使用Cake的Set :: combine来构建你需要的东西......
$users = $this->User->find('all',array('fields' => array('first_name','last_name','id')));
$user_list = Set::combine($users, '{n}.User.id', array('{0} {1}', '{n}.User.first_name', '{n}.User.last_name'));
Run Code Online (Sandbox Code Playgroud)
结果将类似于:
array(
[2] => 'First Last',
[5] => 'Bob Jones'
)
Run Code Online (Sandbox Code Playgroud)
这是文档链接:
http://book.cakephp.org/2.0/en/core-utility-libraries/set.html#Set::combine
| 归档时间: |
|
| 查看次数: |
15965 次 |
| 最近记录: |