0

First name と last name を検索し、利用可能な場合はそれらの特定のレコードを表示し、それらのレコードに対して更新や削除などのアクションを実行するコードを作成しました。検索する次のコードを作成しました。ビルドする正しいアプローチを教えてください検索コントローラー。次のエラーが表示されます:

Message: Method "select" does not exist and was not trapped in __call()

コントローラーに書いたコードは次のとおりです。

public function searchAction($params)
{
    $query = $this->select()
                 ->from(
                array('EMPLOYEES'),
                array('FIRST_NAME','LAST_NAME','SALARY','HIREDATE')
                );
$query = $this->_makeParams($query,$params);
return $this->fetchAll($query);
}

private function _makeParams($query, $params)
{
    $firstname = isset($params['firstname']) ? trim($params['firstname']) : '';
    $lastname = isset($params['lastname']) ? trim($params['lastname']) : '';
$salary = isset($params['salary']) ? trim($params['salary']) : '';
$hiredate= isset($params['hiredate']) ? trim($params['hiredate']) : '';

if($firstname!='')
{
    $name = '%'.$this->quote($firstname).'%';//quote is my own function
    $query->where("EMPLOYEES.FIRST_NAME LIKE '?'",$firstname); 
    }

if($lastname!='')
{
    $query->where("EMPLOYEES.LAST_NAME =?",$lastname);
}

if($salary!='')
{
    $query->where("EMPLOYEES.SALARY=?",$salary);
}

if($hiredate!='')
{
    $query->where("EMPLOYEES.HIRE_DATE=?",$hiredate);
}
 }
4

2 に答える 2

1
public function searchAction($params)
{
    $db      = Zend_Registry :: get('db');
    $select  = $db->select();
    $query = $select->from(
                array('EMPLOYEES'),
                array('FIRST_NAME','LAST_NAME','SALARY','HIREDATE')
                );
$query = $this->_makeParams($query,$params);
return $this->fetchAll($query);
}

Zend レジストリのオブジェクトを作成していないため、エラーが発生しています。そのため、関数をコピーしてコードを置き換えてください。

于 2013-03-28T09:14:14.033 に答える
1

あなたのエラーはselect()、データベース オブジェクトではなくコントローラー オブジェクトに対する呼び出しが原因です。

public function searchAction($params)
{
    //$this in this context is a Zend_Controller_Action object
    //you need to query against your database object.
    $db = Zend_Db_Table::getDefaultAdapter();
    $query = $db->select()
                 ->from(
                array('EMPLOYEES'),
                array('FIRST_NAME','LAST_NAME','SALARY','HIREDATE')
                );
$query = $this->_makeParams($query,$params);
//again make sure to query against the database object
return $db->fetchAll($query);
}

bootstrap.php または application.ini に作成されたデータベース オブジェクトがない場合は、Zend_Db で作成できます。

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));
于 2013-03-28T09:49:19.353 に答える