2009-11-25 9 views
3

J'ai un formulaire avec un élément de sélection que j'ai besoin de remplir avec des valeurs d'une base de données. Plus précisément, le nom et l'identifiant des utilisateurs actuels. La fonction fetchPairs() fonctionne très bien pour cela! Cependant, j'ai besoin de concaténer la valeur de la colonne first_name et de la colonne last_name et l'afficher comme étiquette d'option. Y at-il un moyen de le faire et toujours utiliser fetchPairs()? Si non, comment puis-je obtenir le même résultat? Voici un extrait du code qui travaille actuellement:Zend Framework: Comment concaténer deux colonnes et toujours utiliser fetchPairs()?

<?php // excerpt 

class Default_Form_AddUser extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('select', 'user', array(
      'label'  => 'Select user:', 
      'required' => true, 
      'multiOptions' => $this->_getSelectOptions() 
     )); 
    } 

    protected function _getSelectOptions() 
    { 
     $db = Zend_Db_Table::getDefaultAdapter(); 
     $select = $db->select()->from('users', array('id', 'first_name')); 
     $roleOptions = $db->fetchPairs($select); 
     return $roleOptions; 
    } 
} 

Répondre

11
protected function _getSelectOptions() 
{ 
    $db  = Zend_Db_Table::getDefaultAdapter(); 
    $select = $db->select()->from('users', array(
     'id', 
     'name' => new Zend_Db_Expr("CONCAT(first_name, ' ', lastname)"), 
    )); 

    return $db->fetchPairs($select); 
} 
+1

Cela fonctionne! Merci! – Andrew

3

C'est seulement une idée, et entièrement non testé, mais vous pouvez essayer d'utiliser un Zend_Db_Expr:

$db = Zend_Db_Table::getDefaultAdapter(); 
$select = $db->select()->from(
    'users', 
    array('id', "CONCAT_WS(' ', first_name, last_name") 
); 
$roleOptions = $db->fetchPairs($select); 
return $roleOptions; 

De l'Zend_Db documentation :

Exemple 15.55. Exemples de spécification de colonnes contenant des expressions

Une expression avec des parenthèses devient implicitement Zend_Db_Expr.