Gil*_*ean 10 php mysql database zend-framework zend-db-table
我是Zend Framework和MVC的新手,我对Zend_DB和与数据库交互的正确方法感到有些困惑.
我正在使用PDO MySQL适配器并创建了一些类来扩展抽象类:
class Users extends Zend_Db_Table_Abstract {
protected $_name = 'users';
protected $_primary = 'user_id';
protected $_rowClass = 'User';
public function getUserbyID($id) { /* code */ }
// More code here
}
class User extends Zend_Db_Table_Row_Abstract {
// Code here
}
class Widgets extends Zend_Db_Table_Abstract {
protected $_name = 'widgets';
protected $_rowClass = 'Widget';
public function getWidgetsfromUser($userid) { /* code */ }
// More code here
}
class User extends Zend_Db_Table_Row_Abstract {
public function doSomethingWithWidget() { /* code */ }
// More code here
}
Run Code Online (Sandbox Code Playgroud)
似乎有很多方法来访问DB(fetchAll(),find(),fetchAll()通过适配器,insert(),createRow()和save(),select()对象)我总是发现自己要回去向文档弄清楚我应该做什么.
SO告诉我准备好的语句是要走的路,我一直在尝试使用行集和行(我应该是吗?),但我仍然对与数据库进行交互的最佳方式感到困惑?
(为非常开放的问题道歉)
通常,人们更喜欢通过Table和Row对象访问数据库,以匹配他们面向对象编程的习惯.
如果您需要编写代码来转换或验证查询输入或输出,则OO方法很有用.您还可以在Table或Row类中编写自定义方法来封装常用的查询.
但面向对象的界面已经简化,无法执行您可能需要执行的所有类型的数据库操作.因此query(),fetchAll()当您需要更好地控制SQL时,您可以深入研究并针对Zend_Db_Adapter方法运行SQL查询.
这对于面向对象的数据库接口来说非常常见.可以复制每个 SQL功能的OO层将非常复杂.因此,为了妥协,OO层通常会尝试提供简单的方法来完成最常见的任务,同时让您能够在必要时进行覆盖.
这是对你一般性问题的一般回答.
使用Zend_Db,您可能不想深入了解预处理语句等的细节.您只想使用模型对象来执行基本的CRUD(创建,读取,更新和删除).我知道程序员参考指南很广泛,但它是对Zend_Db的一个很好的介绍.您可能需要仔细查看Zend_Db_Table文档.
但要快速回答你的问题.除非您需要覆盖某些默认行为,否则您不需要扩展Zend_Db_Table_Row_Abstract.你也可以将Users类简化为:
class Users extends Zend_Db_Table_Abstract {
protected $_name = 'users';
// Code here
}
Run Code Online (Sandbox Code Playgroud)
然后使用它你会做一些你提到的事情使用以下内容:
//Create a Users Model Object
$usersDb = new Users();
//Find the record with user_id = 4 and print out their name
$row = $usersDb->find(4);
echo $row->first_name . ' ' . $row->last_name
//Change the first name of this user to Brian
$row->first_name = 'Brian';
$row->update();
//Insert a user into the database
$data = array(
'first_name' => 'Gilean',
'last_name' => 'Smith');
$usersDb->insert($data);
//Retrieve all users with the last name smith and print out their full names
$rows = $usersDb->fetchAll($usersDb->select()->where('last_name = ?', 'smith'));
foreach ($rows as $row) {
echo $row->first_name . ' ' . $row->last_name
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8451 次 |
| 最近记录: |