通常は、DbTable モデルまたはマッパー クラスにメソッドを追加して、このデータを取得します。現在の質問については、これを試してください:
$usersTable = new Application_Model_DbTable_Users();
$zendSession = new Zend_Session_Namespace();
$select = $usersTable->select();
$select->from($usersTable,array('id', 'first_name', 'last_name', 'email', 'status'))
->where("id = ?", $userInsertQuery);
$zendSession->userData = $usersTable->fetchRow($select);
Zend_Db_Select は、同じクエリで同じテーブルにアクセスするために 2 つの異なる方法 ( tablename としてオブジェクトを渡し、 tablename として文字列を渡す) を使用したため、複数のテーブルにアクセスしようとしていると考えているようです。
DbTable のメソッドは次のようになります。
public function getUserData($id)
{
$select = $this->select();
$select->from($this, array('id', 'first_name', 'last_name', 'email', 'status'));
$select->where('id = ?', $id);
$result = $this->fetchRow($select);
return $result;
}
次に、コントローラーで:
$usersTable = new Application_Model_DbTable_Users();
$user = $usersTable->getUserData($userInsertQuery);
$zendSession->userData = $user;
このすべての後、次のように Zend_Auth_Storage_Session を使用して、必要な情報を保存することができます。
if ($result->isValid()) {
//store the username, first and last names of the user
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$storage->write($authAdapter->getResultRowObject(array(
'username', 'first_name', 'last_name'
)));
//or to save all except
$storage->write($authAdapter->getResultRowObject(null, array('password', 'salt'));
}
その後、次のように呼び出してその情報を呼び出すことができます。
$auth = Zend_Auth::getInstance();
$storage = $auth->getStorage();
$strorage->read();
または、Zend_Auth 名前空間を使用して Zend_Session_Namespace から直接同じ情報にアクセスできます。
$session = new Zend_Session_Namespace('Zend_Auth');
$member = $session->storage; //'storage' is the default. However the namespace and key can be changed.