我希望我的PHP Zend应用程序能够访问数据库。
因为任务只有两种类型:从数据库中获取和设置一个值,我考虑用通用方法简化它。
它看起来像这个例子。
namespace MyModule\Model;
use Zend\Db\Table\AbstractTable;
class MyTable extends AbstractTable
{
protected $_name = 'tablename';
public function getRow($selection)
{
$output = array();
foreach($selection as $key => $value)
{
$row = $this->fetchRow($key ' = ' . $value);
if (!$row) throw new Exception("error");
array_merge($output, $row->toArray());
}
return $output;
}
public function addRow($values)
{
$this->insert($values);
}
public function updateRow($selection, $values)
{
foreach($selection as $key => $value)
{
$this->update($values, $key ' = ' . $value);
}
}
public function deleteRow($selection)
{
foreach($selection as $key => $value)
{
$this->delete($key ' = ' . $value);
}
}
}
是否存在针对此方法的任何安全或设计参数?我想让它们全局访问数据库,如
$row = database('mydatabase')->table('mytable')->getRow(array('id'=>'5'));
此解决方案将取代所有简单的数据库模型。
答案 0 :(得分:0)
我想我会提供Zend_Db如何工作的简单示例,然后你可以证明你的意图我不确定我完全理解。
模型
// /application/Models/DbTable/MyTable.php
<?php
class Application_Model_DbTable_MyTable extends Zend_Db_Table_Abstract {
//actual name of database table
protected $_name = 'My_Table';
//name of primary key
protected $_primary = 'id';
}
控制器
// /application/controllers/MyController.php
<?php
class Mycontroller extends Zend_Controller_Action {
public function init() {
}
public function indexAction() {
//instantiate DbTable Model and execute FetchAll returns Rowset object
//call ->toArray() for array to be returned: $model->fetchAll()->toArray();
$model = new Application_Model_DbTable_MyTable();
$model->fetchAll();
}
只需这个简单的模型,您的模型和控制器就可以使用所有CRUD功能。
我们创建新方法或覆盖现有方法,以提供对业务逻辑的更多控制。
我们大多数人都需要更多简单的CRUD功能。
例如,我有一个删除功能,需要检查其他数据是否成功:
// /application/Models/DbTable/Track.php
public function deleteTrack($trackId) {
$trackRowset = $this->find($trackId);
$trackToGo = $trackRowset->current();
$usedBy = $trackToGo->findDependentRowset('Application_Model_DbTable_Member');
if (count($usedBy) == 0) {
$where = $this->getAdapter()->quoteInto('trackid = ?', $trackId);
$this->delete($where);
} else {
throw new Zend_Exception('Track is still assigned to member(s) and cannot be deleted.'
. "<br />" . 'Members: ' . count($usedBy));
}
}
我希望这为我们的讨论增添了一些清晰度。