問題描述
我正在嘗試使用 Zend Framework,并嘗試針對我正在制作的網站使用快速入門"指南,只是為了了解該過程將如何運作.如果這個答案很明顯,請原諒我,希望有經驗的人可以對此有所了解.
I'm toying with Zend Framework and trying to use the "QuickStart" guide against a website I'm making just to see how the process would work. Forgive me if this answer is obvious, hopefully someone experienced can shed some light on this.
我有三個數據庫表:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`email` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL default '',
`first` varchar(128) NOT NULL default '',
`last` varchar(128) NOT NULL default '',
`gender` enum('M','F') default NULL,
`birthyear` year(4) default NULL,
`postal` varchar(16) default NULL,
`auth_method` enum('Default','OpenID','Facebook','Disabled') NOT NULL default 'Default',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE `user_password` (
`user_id` int(11) NOT NULL,
`password` varchar(16) NOT NULL default '',
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE `user_metadata` (
`user_id` int(11) NOT NULL default '0',
`signup_date` datetime default NULL,
`signup_ip` varchar(15) default NULL,
`last_login_date` datetime default NULL,
`last_login_ip` varchar(15) default NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
我想創建一個在某些情況下使用所有三個表的用戶模型.例如,如果/當需要元數據時訪問元數據表.僅當設置了默認"auth_method 時才訪問 user_password 表.稍后我可能會添加一個配置文件表,我希望能夠從用戶模型訪問該表.
I want to create a User model that uses all three tables in certain situations. E.g., the metadata table is accessed if/when the meta data is needed. The user_password table is accessed only if the 'Default' auth_method is set. I'll likely be adding a profile table later on that I would like to be able to access from the user model.
使用采埃孚做到這一點的最佳方法是什么?為什么?
What is the best way to do this with ZF and why?
推薦答案
class Users extends Zend_Db_Table_Abstract
{
protected $_name = 'users';
protected $_rowClass = 'User';
protected $_dependentTables = array ('UserMetadata', 'UserPassword');
...
class UserMetadata extends Zend_Db_Table_Abstract
{
protected $_name = 'user_metadata';
protected $_referenceMap = array (
'Users'=> array (
'columns'=>'user_id',
'refTableClass'=>'Users',
'refColumns'=>'id'
)
);
...
class UserPassword extends Zend_Db_Table_Abstract
{
protected $_name = 'user_password';
protected $_referenceMap = array (
'Users'=> array (
'columns'=>'user_id',
'refTableClass'=>'Users',
'refColumns'=>'id'
)
);
獲取數據:
$id = //get your user id from somewhere
$users = new Users();
$user = $users->fetchRow('id=?', $id);
if ($user->authMethod == 0)
{
$metadata = $user->findDependentRowset('UserMetadata')->current();
}
或
$user = $users->fetchRow($users->select()
->where('gender=?, 'M')
->order('email ASC');
...等
插入數據:
$newRow = $users->fetchNew();
$newRow->email = me@domain.com;
$newRow->save();
或
$users = new Users();
$data = array('email' => 'me@domain.com',
'firstname' => 'Me');
$users->insert($data);
更新:
$user->email = 'me@domain.org';
$user->save();
刪除一行:
$user->delete();
使用交易:
$db->beginTransaction();
$db->commit();
$db->rollback();
等等...都在 ZF 手冊中!
這篇關于在 Zend Framework 中為具有多個表關系的對象建模的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!