据我所知,您可以使用类扩展Zend_Db_Table_Abstract,类User扩展Zend_Db_Table_Row_Abstract,将Users的$ _rowClass属性设置为User。
要创建并保存新行,我只知道如何执行以下操作:
$users = new Users()
$user = $users->createRow();
$user->name = 'name';
$user->save();
你能告诉我怎样才能做到这一点吗?
$user = new User();
$user->name = 'name';
$user->save();
作为旁注,我还在考虑尝试使用以下语法来获取特定行:
$user = new User($userID);
然而,鉴于这并非尝试创建新用户而是为了获得现有用户,我认为以下语法可能更具可读性 - 您如何看待?
$users = new Users();
$user = $users->fetchRow($userID);
答案 0 :(得分:1)
以下是如何构建没有Table对象的新行实例:
class User extends Zend_Db_Table_Row_Abstract
{
protected $_tableClass = "Users";
}
$user = new User();
$user->name = "name";
$user->save(); // performs an INSERT
以下是如何在没有Table对象的情况下为数据库中的给定行构造行实例:
class User extends Zend_Db_Table_Row_Abstract
{
protected $_tableClass = "Users";
public function __construct(array $config = array())
{
if (isset($config["key"]) {
$table = $this->_getTableFromString($this->_tableClass);
$rowset = call_user_func_array(array($table, "find"), (array) $config["key"]);
$row = $rowset->current();
if ($row != false) {
$config["data"] = $row->toArray();
$config["stored"] = true;
}
}
parent::__construct($config);
}
}
$user = new User(array("key"=>$userid));
$user->name = "name";
$user->save(); // performs an UPDATE
注意:这些代码示例未经过测试,我会留给您。
答案 1 :(得分:0)
嗯,有三种选择:
不用说,第二种选择是最好的......请注意,这不是很酷:
$user = new User($userID);
每次你都必须将构造函数参数转发给抽象超类......这可能很烦人......
当然,最后一个选项是使用不同的东西,它已经按照你描述的方式工作,例如motion-twins SPOD,我个人更喜欢它,因为它非常轻巧,小巧,简单,因此与其他框架很好地集成,而且它更好地设计和集中,你用它编写的代码看起来更直观......或者它可以激发你,如何修补zend框架为你工作的方式你喜欢......
希望有所帮助...
格尔茨
back2dos
答案 2 :(得分:0)
由于我不知道Zend DB Table类等是如何工作的,我提供了另一种选择:
这很麻烦,可能要为很多不同的课程做太多工作,但你可以做点什么
class User {
public function __construct($userID) {
//initialize the db
$db = Zend_Db::factory(...);
$sql = $db->quoteInto("select * from users where user_id = ?", $userID);
$userObject = $db->query($sql)->fetchObject();
//now $userObject has all the data of that particular user
}
public function save() {
//first gather this user's data into an array, $userData
//put the user id into $user_id
$db->update('users', $userData, 'user_id = $user_id);
}
}
这很邋but但是这是我能想出来的唯一选择。
答案 3 :(得分:0)
class User extends UserModel {
function __construct($userid=NULL){
parent::__construct()
if($userid!=NULL){
return $this->find($userid);
}else{
return $this->createRow();
}
}
}
但老实说,差异并不值得。