perfect the Westdc\Db\Record

This commit is contained in:
Jack Freeman 2015-02-26 00:03:43 +08:00
parent 687f1e9cb7
commit 4fa342c3ce
2 changed files with 74 additions and 7 deletions

View File

@ -12,4 +12,8 @@ final class PreDeclare {
const EVENT_INSERT_PRE = "insert.pre"; const EVENT_INSERT_PRE = "insert.pre";
const EVENT_INSERT_PROCESS_DATA = "insert.processData"; const EVENT_INSERT_PROCESS_DATA = "insert.processData";
const EVENT_INSERT_POST = "insert.post"; const EVENT_INSERT_POST = "insert.post";
const EVENT_UPDATE_PRE = "update.pre";
const EVENT_UPDATE_PROCESS_DATA = "update.processData";
const EVENT_UPDATE_POST = "update.post";
} }

View File

@ -8,14 +8,23 @@
namespace Westdc\Db; namespace Westdc\Db;
use Zend\Db\Sql\TableIdentifier; use Fselab\Db\RecordException;
use Zend\Db\Sql;
use Westdc\EventModel\AbstractEventManager; use Westdc\EventModel\AbstractEventManager;
class Record extends AbstractEventManager { class Record extends AbstractEventManager {
/**
* 向数据库表中写入新数据
* @param $table
* @param $data
* @param callable $callback
* @return bool
* @throws RecordException
*/
public function insert($table,$data,callable $callback = null){ public function insert($table,$data,callable $callback = null){
if(!is_string($table) && !$table instanceof TableIdentifier) if(!is_string($table) && !$table instanceof Sql\TableIdentifier)
throw new RecordException("table must is string or TableIdentifier"); throw new RecordException("table must is string or TableIdentifier");
$params = compact('data'); $params = compact('data');
@ -27,13 +36,67 @@ class Record extends AbstractEventManager {
if(!$results->isEmpty()) if(!$results->isEmpty())
$data = $results->bottom(); $data = $results->bottom();
$dbh = new Dbh; try{
$dbh = new Dbh;
$id = $dbh->insert($table,$data,true);
}catch(\Exception $e){
throw new RecordException($e->getMessage());
}
$id = $dbh->insert($table,$data,true); if(!empty($callback) && is_callable($callback))
call_user_func($callback,$id,$data);
if(!empty($callback)) $params = compact('data','id');
if(is_callable($callback)) $this->getEventManager()->trigger(PreDeclare::EVENT_INSERT_POST, $this, $params);
call_user_func($callback,$id,$data);
return true;
}
/**
* 更新数据库记录
* @param $table
* @param array $data
* @param string $where
* @param callable $callback
* @return bool
* @throws RecordException
*/
public function update($table,array $data,$where = '',callable $callback = null){
if(!is_string($table) && !$table instanceof Sql\TableIdentifier)
throw new RecordException("table must is string or TableIdentifier");
$params = compact('data');
$this->getEventManager()->trigger(PreDeclare::EVENT_UPDATE_PRE, $this, $params);
/** @var \Zend\EventManager\ResponseCollection $results */
$results = $this->getEventManager()->trigger(PreDeclare::EVENT_UPDATE_PROCESS_DATA, $this, $params);
if(!$results->isEmpty())
$data = $results->bottom();
if($table instanceof Sql\TableIdentifier)
$table = $table->getSchema().".".$table->getTable();
if(is_string($where) || empty($where)){
$dbh = new Dbh;
$dbh->update($table,$data,$where);
}
elseif($where instanceof Sql\Where)
{
}
elseif(is_array($where))
{
}
else
throw new RecordException("Condition must is one of string,Zend\\Db\\Sql\\Where object,array");
if(!empty($callback) && is_callable($callback))
call_user_func($callback,$data);
$params = compact('data','id'); $params = compact('data','id');
$this->getEventManager()->trigger(PreDeclare::EVENT_INSERT_POST, $this, $params); $this->getEventManager()->trigger(PreDeclare::EVENT_INSERT_POST, $this, $params);