【问题标题】:Zend Framework: How to concatenate two columns and still use fetchPairs()?Zend Framework:如何连接两列并仍然使用 fetchPairs()?
【发布时间】:2009-11-25 19:59:08
【问题描述】:

我有一个带有选择元素的表单,我需要用数据库中的值填充它。具体来说,当前用户的名称和 id。 fetchPairs() 函数非常适合这个!但是,我需要连接来自first_name 列和last_name 列的值并将其显示为选项标签。有没有办法做到这一点并且仍然使用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;
    }
}

【问题讨论】:

    标签: zend-framework zend-form zend-db


    【解决方案1】:
    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);
    }
    

    【讨论】:

      【解决方案2】:

      这只是一个想法,完全未经测试,但您可以尝试使用 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;
      

      来自Zend_Db documentation

      示例 15.55。指定包含表达式的列的示例

      带括号的表达式隐式变为 Zend_Db_Expr。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        相关资源
        最近更新 更多