Example #1
0
 /**
  * Returns the static model of the specified AR class.
  * @return CActiveRecord the static model class
  */
 public static function model($className = __CLASS__)
 {
     return parent::model($className);
 }
Example #2
0
 /**
  * 根据表名获取记录
  * @param $tname	string	表名(可以是由item虚化出来的,如“item_nnhysj_tz”)
  * @return 记录总数
  */
 public function getFind($tname)
 {
     $ts = $this->parseRealTable($tname);
     if ($this->beforeFind()) {
         $this->applyScopes($ts['criteria']);
         $rows = DBModel::model()->getDb()->selectCollection($ts['name'])->find($ts['criteria']->getConditions());
     }
     return $rows;
 }
Example #3
0
 /**
  * 同步json数据到相应数实体表
  * 用来使用js更新表数据,操作需谨慎
  * 普通索引: 	index{"RealCost":1},[]
  * 唯一索引:	index{"ItemShopTags":1},{"unique":true}
  * 新数据:		{"_id":"item_blink","ItemShopTags":["传送"],"Lines":[],"RealCost":2150,"Category":"奥术"}
  * 更新数据:	{"_id":"item_blink"},{"$set":{"ItemShopTags":["传送","防具"]}}
  */
 public function actionSynJStoDB()
 {
     $js_id = isset($_GET['id']) ? $_GET['id'] : '';
     //待同步文件名路径
     $file = File::model()->findByPk(new MongoId($js_id));
     if (!$file) {
         throw new CHttpException(404, '该数据文件不存在。');
     }
     $js_name = pathinfo($file->metadata['name']);
     //真实文件名
     $js_name = $js_name['filename'];
     $exers = array('i' => array(0, 0), 'a' => array(0, 0), 'u' => array(0, 0));
     if ($file) {
         $id_info = explode('-', $js_name);
         //剔除文件名中的日期
         //			foreach($id_info as $namekey=>$namevo){
         //				if(preg_match('/^\d{14}$/i', $namevo)){
         //					unset($id_info[$namekey]);
         //					$cname = implode('-', $id_info);
         //				}
         //			}
         //确认集合名称
         if ($id_info > 1) {
             $tables = $this->_listCollections(DBModel::model()->getDb());
             foreach ($id_info as $namevo) {
                 //集合名称:当前库中存在该集合或者以‘item_’开头
                 if (isset($tables[$namevo])) {
                     $cname = $namevo;
                     break;
                 }
             }
         }
         //获取并执行导入新数据
         $body = $file->getBytes();
         //获取文件内容
         $lines = preg_split('/(\\r\\n|\\n)/i', $body);
         //每行作为一个语句
         //若仅为集合名称,则清空该集合内容,修改为独立操作
         //if(count($id_info)==1){
         //	CardItem::model()->getDb()->selectCollection($cname)->remove();	//drop会删除集合,remove仅清空记录
         //}
         //循环进行插入/更新/创建索引
         foreach ($lines as $line) {
             $line = trim($line);
             if (!empty($line)) {
                 //判定是否为索引,若是则创建,否则作为普通数据直接插入
                 if (substr($line, 0, 5) == 'index') {
                     //索引记录以index字符串开头
                     //$exe_query = 'ensureIndex(o)';
                     $line = substr($line, 5);
                     //$exe_query = 'ensureIndex(o)';
                     $ret = DBModel::model()->getDb()->selectCollection('system.indexes')->insert((array) json_decode($line));
                     $exers['i'][$ret]++;
                     //记录执行结果
                     //判断是否是更新
                 } else {
                     if (preg_match('/^\\{"_id":"[0-9a-z_-]+"\\},/i', $line)) {
                         $line = explode('},{"$set":', $line);
                         if (isset($line[1])) {
                             $update_where = (array) json_decode($line[0] . '}');
                             if (preg_match('/^[a-z0-9]{24}$/', $update_where['_id'])) {
                                 $update_where['_id'] = new MongoId($update_where['_id']);
                             }
                             $ret = DBModel::model()->getDb()->selectCollection($cname)->update($update_where, (array) json_decode('{"$set":' . $line[1]));
                             $exers['u'][$ret]++;
                         }
                         //其余为插入
                     } else {
                         //$exe_query = 'insert(o)';
                         $line = (array) json_decode(preg_replace('/\\{.?"\\$oid".?:.?("[0-9a-z]+")[^}]?\\}/i', '\\1', $line));
                         //转为普通字符串
                         //重新构造MongoId的_id
                         if (preg_match('/^[a-z0-9]{24}$/', $line['_id'])) {
                             $line['_id'] = new MongoId($line['_id']);
                         }
                         $ts = DBModel::model()->parseRealTable($cname);
                         $ret = DBModel::model()->getDb()->selectCollection($ts['name'])->insert($line);
                         $exers['a'][$ret]++;
                     }
                 }
             }
         }
     }
     $this->redirect_back(array('exers' => $exers['i'][0] . '#' . $exers['i'][1] . '#' . $exers['a'][0] . '#' . $exers['a'][1] . '#' . $exers['u'][0] . '#' . $exers['u'][1]));
     //返回上一页
     /* 	参考代码
     			db.getCollection("game").ensureIndex({
     			  "code": NumberInt(1)
     			},[]);
     			db.getCollection("game").insert({
     			  "_id": ObjectId("516140719b2a952c14000000"),
     			  "name": "Dota2",
     			});
     		 */
 }
Example #4
0
    width: 100%;
}
-->
</style>
<form method="post" action="/dump/export">
	<ul class="list">
		<?php 
if (empty($tables)) {
    ?>
			数据库为空
		<?php 
} else {
    ?>
			<?php 
    foreach ($tables as $en_name => $name) {
        $rows = DBModel::model()->getCount($en_name);
        ?>
				<li>
					<label>
						<input type="checkbox" class="all_input" name="checked[]" value="<?php 
        echo $en_name;
        ?>
" <?php 
        if (in_array($name, $selectedTables)) {
            ?>
checked="checked"<?php 
        }
        ?>
/> 
						<b><?php 
        echo $name;