|
@@ -7,14 +7,13 @@
|
|
|
* namespace Model;
|
|
|
*
|
|
|
* use \Qii\Model;
|
|
|
-
|
|
|
* class comments extends Model
|
|
|
* {
|
|
|
- * public function __construct()
|
|
|
- * {
|
|
|
- * parent::__construct();
|
|
|
- * $this->setRules(new \Qii\Driver\Rules(\Qii\Autoloader\Import::includes('configure/table/adcycle.comments.config.php')));
|
|
|
- * }
|
|
|
+ * public function __construct()
|
|
|
+ * {
|
|
|
+ * parent::__construct();
|
|
|
+ * $this->setRules(new \Qii\Driver\Rules(\Qii\Autoloader\Import::includes('configure/table/adcycle.comments.config.php')));
|
|
|
+ * }
|
|
|
* }
|
|
|
* 2.
|
|
|
* $test = _M(new \Qii\Driver\Rules(\Qii\Autoloader\Import::includes('configure/table/test.config.php')));
|
|
@@ -25,198 +24,211 @@ namespace Qii\Driver;
|
|
|
|
|
|
class Model
|
|
|
{
|
|
|
- const VERSION = '1.2';
|
|
|
- /**
|
|
|
- * @var $_allow 允许使用的数据库驱动类新
|
|
|
- */
|
|
|
- protected $_allow = array('pdo', 'mysql', 'mysqli');
|
|
|
- /**
|
|
|
- * @var $db 数据库实例
|
|
|
- */
|
|
|
- public $db = null;
|
|
|
- /**
|
|
|
- * 数据库配置文件
|
|
|
- */
|
|
|
- protected $_dbInfo;
|
|
|
- /**
|
|
|
- * 数据库驱动
|
|
|
- */
|
|
|
- protected $_driver = 'pdo';
|
|
|
- /**
|
|
|
- * @var $_load 加载类
|
|
|
- */
|
|
|
- public $_load;
|
|
|
-
|
|
|
- /**
|
|
|
- * @var $_language 语言包
|
|
|
- */
|
|
|
- public $_language;
|
|
|
- /**
|
|
|
- * @var array $rules 数据表规则
|
|
|
- */
|
|
|
- private $rules = null;
|
|
|
- /**
|
|
|
- * @var \Qii_Driver_Easy $model
|
|
|
- */
|
|
|
- private $model = array();
|
|
|
- /**
|
|
|
- * @var Qii_Request_Abstract $_request 请求类
|
|
|
- */
|
|
|
- protected $_request;
|
|
|
- /**
|
|
|
- * @var $_helper helper类
|
|
|
- */
|
|
|
- protected $_helper;
|
|
|
-
|
|
|
- public function __construct()
|
|
|
- {
|
|
|
- $this->_load = \Qii\Autoloader\Psr4::getInstance()->loadClass('\Qii\Autoloader\Loader');
|
|
|
- $this->_language = \Qii\Autoloader\Psr4::getInstance()->loadClass('\Qii\Language\Loader');
|
|
|
- $this->_request = \Qii\Autoloader\Psr4::getInstance()->loadClass('Qii\Request\Http');
|
|
|
- $this->_helper = \Qii\Autoloader\Psr4::getInstance()->loadClass('Qii\Autoloader\Helper');
|
|
|
- $this->_dbInfo = \Qii\Config\Register::getAppConfigure(\Qii\Config\Register::get(\Qii\Config\Consts::APP_DB));
|
|
|
- if (isset($this->_dbInfo['driver'])) {
|
|
|
- $this->_driver = $this->_dbInfo['driver'];
|
|
|
- }
|
|
|
- if (!in_array($this->_driver, $this->_allow)) {
|
|
|
- $this->_driver = array_shift($this->_allow);
|
|
|
- }
|
|
|
- \Qii\Autoloader\Import::requires(array(
|
|
|
- Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'Base.php',
|
|
|
- Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'ConnBase.php',
|
|
|
- Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'ConnIntf.php',
|
|
|
- Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . ucWords($this->_driver) . DS . 'Connection.php',
|
|
|
- Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . ucWords($this->_driver) . DS . 'Driver.php',
|
|
|
- ));
|
|
|
- $this->db = \Qii\Autoloader\Psr4::getInstance()->loadClass(
|
|
|
- '\Qii\Driver\\' . ucWords($this->_driver) . '\Driver',
|
|
|
+ const VERSION = '1.2';
|
|
|
+ /**
|
|
|
+ * @var $_allow 允许使用的数据库驱动类新
|
|
|
+ */
|
|
|
+ protected $_allow = array('pdo', 'mysql', 'mysqli');
|
|
|
+ /**
|
|
|
+ * @var $db 数据库实例
|
|
|
+ */
|
|
|
+ public $db = null;
|
|
|
+ /**
|
|
|
+ * 数据库配置文件
|
|
|
+ */
|
|
|
+ protected $_dbInfo;
|
|
|
+ /**
|
|
|
+ * 数据库驱动
|
|
|
+ */
|
|
|
+ protected $_driver = 'pdo';
|
|
|
+ /**
|
|
|
+ * @var $_load 加载类
|
|
|
+ */
|
|
|
+ public $_load;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var $_language 语言包
|
|
|
+ */
|
|
|
+ public $_language;
|
|
|
+ /**
|
|
|
+ * @var array $rules 数据表规则
|
|
|
+ */
|
|
|
+ private $rules = null;
|
|
|
+ /**
|
|
|
+ * @var \Qii_Driver_Easy $model
|
|
|
+ */
|
|
|
+ private $model = array();
|
|
|
+ /**
|
|
|
+ * @var Qii_Request_Abstract $_request 请求类
|
|
|
+ */
|
|
|
+ protected $_request;
|
|
|
+ /**
|
|
|
+ * @var $_helper helper类
|
|
|
+ */
|
|
|
+ protected $_helper;
|
|
|
+
|
|
|
+ public function __construct()
|
|
|
+ {
|
|
|
+ $this->_load = \Qii\Autoloader\Psr4::getInstance()->loadClass('\Qii\Autoloader\Loader');
|
|
|
+ $this->_language = \Qii\Autoloader\Psr4::getInstance()->loadClass('\Qii\Language\Loader');
|
|
|
+ $this->_request = \Qii\Autoloader\Psr4::getInstance()->loadClass('Qii\Request\Http');
|
|
|
+ $this->_helper = \Qii\Autoloader\Psr4::getInstance()->loadClass('Qii\Autoloader\Helper');
|
|
|
+ $this->_dbInfo = \Qii\Config\Register::getAppConfigure(\Qii\Config\Register::get(\Qii\Config\Consts::APP_DB));
|
|
|
+ if (isset($this->_dbInfo['driver'])) {
|
|
|
+ $this->_driver = $this->_dbInfo['driver'];
|
|
|
+ }
|
|
|
+ if (!in_array($this->_driver, $this->_allow)) {
|
|
|
+ $this->_driver = array_shift($this->_allow);
|
|
|
+ }
|
|
|
+ \Qii\Autoloader\Import::requires(array(
|
|
|
+ Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'Base.php',
|
|
|
+ Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'ConnBase.php',
|
|
|
+ Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . 'ConnIntf.php',
|
|
|
+ Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . ucWords($this->_driver) . DS . 'Connection.php',
|
|
|
+ Qii_DIR . DS . 'Qii' . DS . 'Driver' . DS . ucWords($this->_driver) . DS . 'Driver.php',
|
|
|
+ ));
|
|
|
+ $this->db = \Qii\Autoloader\Psr4::getInstance()->loadClass(
|
|
|
+ '\Qii\Driver\\' . ucWords($this->_driver) . '\Driver',
|
|
|
\Qii\Autoloader\Psr4::getInstance()->loadClass(
|
|
|
'\Qii\Driver\\' . ucWords($this->_driver) . '\Connection'
|
|
|
)
|
|
|
);
|
|
|
- $this->db->_debugSQL = isset($this->_dbInfo['debug']) ? $this->_dbInfo['debug'] : false;
|
|
|
- return $this;
|
|
|
- }
|
|
|
- /**
|
|
|
- * 将属性转到DB类中去
|
|
|
- */
|
|
|
- public function __get($attr)
|
|
|
- {
|
|
|
- if($this->db)
|
|
|
- {
|
|
|
- return $this->db->$attr;
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前使用的数据库
|
|
|
- */
|
|
|
- public function getUseDB()
|
|
|
- {
|
|
|
- return $this->db->useDB;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置规则
|
|
|
- * @param array $rules
|
|
|
- */
|
|
|
- public function setRules(\Qii\Driver\Rules $rules)
|
|
|
- {
|
|
|
- if (empty($rules)) throw new \Exception(\Qii::i('Please set rules first'), __LINE__);
|
|
|
- $this->rules = $rules;
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成数据库结构
|
|
|
- */
|
|
|
- public function tableStruct()
|
|
|
- {
|
|
|
- $this->checkRulesInstance();
|
|
|
- $struct = array_flip($this->rules->getFields());
|
|
|
- foreach ($struct AS $key => $val) {
|
|
|
- $struct[$key] = '';
|
|
|
- }
|
|
|
- return $struct;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检查是否已经设置规则
|
|
|
- */
|
|
|
- final public function checkRulesInstance()
|
|
|
- {
|
|
|
- if ($this->rules == null) throw new \Exception(\Qii::i('Please set rules first'), __LINE__);
|
|
|
- }
|
|
|
- /**
|
|
|
- * 获取当前初始化的model
|
|
|
- * @return \Qii_Driver_Easy
|
|
|
- */
|
|
|
- final public function getInstance()
|
|
|
- {
|
|
|
- $this->checkRulesInstance();
|
|
|
- $tableName = $this->rules->getTableName();
|
|
|
- if(!isset($this->model[$tableName])) $this->model[$tableName] = _DBDriver($this->rules);
|
|
|
- return $this->model[$tableName];
|
|
|
- }
|
|
|
- /**
|
|
|
- * 设置主键
|
|
|
- * @param array $privateKey 设置主键
|
|
|
- * @return Object
|
|
|
- */
|
|
|
- final public function setPrivateKey($privateKey = array())
|
|
|
- {
|
|
|
- $this->getInstance()->setPrivateKey($privateKey);
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检查数据是否存在
|
|
|
- * @param array $fields 数据
|
|
|
- * @return \Qii\Driver\Response
|
|
|
- */
|
|
|
- final public function _exist($fields, $privateKey = array())
|
|
|
- {
|
|
|
- return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_exist();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 保存数据
|
|
|
- * @param array $fields 数据
|
|
|
- * @return \Qii\Driver\Response
|
|
|
- */
|
|
|
- final public function _save($fields, $privateKey = array())
|
|
|
- {
|
|
|
- return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_save();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新数据
|
|
|
- * @param array $fields 数据
|
|
|
- * @return \Qii\Driver\Response
|
|
|
- */
|
|
|
- final public function _update($fields, $privateKey = array())
|
|
|
- {
|
|
|
- return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_update();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除数据
|
|
|
- * @param array $fields 数据
|
|
|
- * @return \Qii_Response
|
|
|
- */
|
|
|
- final public function _remove($fields, $privateKey = array())
|
|
|
- {
|
|
|
- return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_remove();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 方法不存在的时候调用$this->db下的方法
|
|
|
- * @param string $method 方法名
|
|
|
- * @param mix $args 参数
|
|
|
- */
|
|
|
- public function __call($method, $args)
|
|
|
- {
|
|
|
- if ($this->db) return call_user_func_array(array($this->db, $method), $args);
|
|
|
- }
|
|
|
+ $this->db->_debugSQL = isset($this->_dbInfo['debug']) ? $this->_dbInfo['debug'] : false;
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置属性
|
|
|
+ *
|
|
|
+ * @param string $name 属性名
|
|
|
+ * @param mix $val 值
|
|
|
+ */
|
|
|
+ public function __set($name, $val)
|
|
|
+ {
|
|
|
+ $this->db->$name = $val;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将属性转到DB类中去
|
|
|
+ */
|
|
|
+ public function __get($attr)
|
|
|
+ {
|
|
|
+ if ($this->db) {
|
|
|
+ return $this->db->$attr;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前使用的数据库
|
|
|
+ */
|
|
|
+ public function getUseDB()
|
|
|
+ {
|
|
|
+ return $this->db->useDB;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置规则
|
|
|
+ * @param array $rules
|
|
|
+ */
|
|
|
+ public function setRules(\Qii\Driver\Rules $rules)
|
|
|
+ {
|
|
|
+ if (empty($rules)) throw new \Exception(\Qii::i('Please set rules first'), __LINE__);
|
|
|
+ $this->rules = $rules;
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成数据库结构
|
|
|
+ */
|
|
|
+ public function tableStruct()
|
|
|
+ {
|
|
|
+ $this->checkRulesInstance();
|
|
|
+ $struct = array_flip($this->rules->getFields());
|
|
|
+ foreach ($struct AS $key => $val) {
|
|
|
+ $struct[$key] = '';
|
|
|
+ }
|
|
|
+ return $struct;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查是否已经设置规则
|
|
|
+ */
|
|
|
+ final public function checkRulesInstance()
|
|
|
+ {
|
|
|
+ if ($this->rules == null) throw new \Exception(\Qii::i('Please set rules first'), __LINE__);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前初始化的model
|
|
|
+ * @return \Qii_Driver_Easy
|
|
|
+ */
|
|
|
+ final public function getInstance()
|
|
|
+ {
|
|
|
+ $this->checkRulesInstance();
|
|
|
+ $tableName = $this->rules->getTableName();
|
|
|
+ if (!isset($this->model[$tableName])) $this->model[$tableName] = _DBDriver($this->rules);
|
|
|
+ return $this->model[$tableName];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置主键
|
|
|
+ * @param array $privateKey 设置主键
|
|
|
+ * @return Object
|
|
|
+ */
|
|
|
+ final public function setPrivateKey($privateKey = array())
|
|
|
+ {
|
|
|
+ $this->getInstance()->setPrivateKey($privateKey);
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查数据是否存在
|
|
|
+ * @param array $fields 数据
|
|
|
+ * @return \Qii\Driver\Response
|
|
|
+ */
|
|
|
+ final public function _exist($fields, $privateKey = array())
|
|
|
+ {
|
|
|
+ return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_exist();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存数据
|
|
|
+ * @param array $fields 数据
|
|
|
+ * @return \Qii\Driver\Response
|
|
|
+ */
|
|
|
+ final public function _save($fields, $privateKey = array())
|
|
|
+ {
|
|
|
+ return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_save();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新数据
|
|
|
+ * @param array $fields 数据
|
|
|
+ * @return \Qii\Driver\Response
|
|
|
+ */
|
|
|
+ final public function _update($fields, $privateKey = array())
|
|
|
+ {
|
|
|
+ return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_update();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除数据
|
|
|
+ * @param array $fields 数据
|
|
|
+ * @return \Qii_Response
|
|
|
+ */
|
|
|
+ final public function _remove($fields, $privateKey = array())
|
|
|
+ {
|
|
|
+ return $this->getInstance()->setPrivateKey($privateKey)->setFieldsVal($fields)->_remove();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 方法不存在的时候调用$this->db下的方法
|
|
|
+ * @param string $method 方法名
|
|
|
+ * @param mix $args 参数
|
|
|
+ */
|
|
|
+ public function __call($method, $args)
|
|
|
+ {
|
|
|
+ if ($this->db) return call_user_func_array(array($this->db, $method), $args);
|
|
|
+ }
|
|
|
}
|