代码之家  ›  专栏  ›  技术社区  ›  aWebDeveloper

cakephp查找列表

  •  13
  • aWebDeveloper  · 技术社区  · 14 年前

    嗨,我想能够使用find生成一个列表,以便在select helper中使用。但有一个问题。我也要取ID,名称(名字+姓氏)。所以我如何才能做到。我希望名字和姓氏作为名字加入。我怎样才能做到。

    $this->User->find('all',array('fields' => array('first_name','last_name','id')));
    

    我不能使用模型过滤器和回调。请建议我如何在控制器本身中进行。

    5 回复  |  直到 6 年前
        1
  •  24
  •   Álvaro González    6 年前

    virtualFields displayField

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

    $this->User->find('list')

    public $displayField = 'full_name';
    

    public $displayField = 'User.full_name';
    

        2
  •  16
  •   adriaroca ADmad    10 年前

    $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'));
    

    array(
     [2] => 'First Last',
     [5] => 'Bob Jones'
    )
    

    http://book.cakephp.org/2.0/en/core-utility-libraries/set.html#Set::combine

        3
  •  1
  •   Ishak Ali    11 年前

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

    $this->User->find('all',array('fields' => array('full_name','id')));
    

        5
  •  0
  •   Eric VB    9 年前

    $bancos_enteros = $this->Financiacion->Banco->find('all', array(
      'fields' => array('Empresa.codigo_contable','Empresa.nombre_corto', 'Banco.id'),
      'order' => array('Empresa.codigo_contable' => 'asc'),
      'recursive' => 1
    ));
    $bancos = Set::combine(
       $bancos_enteros,
       '{n}.Banco.id',
        array(
           '{0} {1}',
           '{n}.Empresa.codigo_contable',
           '{n}.Empresa.nombre_corto'
         )
     );
    

        array(
        (int) 14 => '57200002 Caixa',
        (int) 15 => '57200003 Sabadell',
        (int) 3 => '57200005 BBVA',
        (int) 16 => '57200006 Deutsche Bank',
        (int) 17 => '57200007 Popular',
        (int) 18 => '57200009 March',
        (int) 26 => '57200010 Bankinter',
        (int) 4 => '57200011 Santander'
    )
    

    $this->Financiacion->Banco->Empresa->virtualFields = array(
        'codigo_nombre' => 'CONCAT(Empresa.codigo_contable,Empresa.nombre_corto)'
    );
    $this->Financiacion->Banco->virtualFields['codigo_nombre'] =  $this->Financiacion->Banco->Empresa->virtualFields['codigo_nombre'];
    $bancos = $this->Financiacion->Banco->find('list', array(
       'fields' => array('Banco.id','Banco.codigo_nombre'),
       'order' => array('Banco.codigo_nombre' => 'asc'),
       'recursive' => 1
        )   
    );
    

    unset($this->Financiacion->Banco->Empresa->virtualFields);
    unset($this->Financiacion->Banco->virtualFields);