cakephp查找列表

aWe*_*per 13 cakephp

嗨我希望能够使用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

我认为这可以使用模型中的virtualFieldsdisplayField属性来完成.

在您的模型中,为全名定义一个虚拟字段,如下所示:

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

  • VirtualFields可能不一定是解决方案.问题是,您是否想要全局更改返回数据的结构以容纳一个控制器/操作?如果没有,使用Set :: combine可能是一个更好的解决方案.如果全局需要full_name,请添加虚拟字段. (2认同)