| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 | 
							- <?php
 
- /**
 
-  * FecShop file.
 
-  *
 
-  * @link http://www.fecshop.com/
 
-  * @copyright Copyright (c) 2016 FecShop Software LLC
 
-  * @license http://www.fecshop.com/license/
 
-  */
 
- namespace fec\helpers;
 
- use Yii; 
 
- /**
 
-  * @author Terry Zhao <2358269014@qq.com>
 
-  * @since 1.0
 
-  */
 
- class CDB
 
- {	
 
- 	
 
- 	
 
- 	public static $db;
 
- 	
 
- 	# 1.得到当前的db
 
- 	public static function getDb($db_name = 'db'){
 
- 		if(!self::$db){
 
- 			if(!$db_name){
 
- 				$db_name = 'db';
 
- 			}
 
- 			self::$db = Yii::$app->$db_name;
 
- 		}
 
- 		return self::$db;
 
- 	}
 
- 	
 
- 	# 1.通过sql查看所有的记录
 
- 	# example:  CDB::findBySql('select * from sales_order_info where order_id > :order_id'
 
- 	#							,[':order_id'=>1 ]);
 
- 	public static function findAllBySql($sql,$data=[],$db_name=''){
 
- 		# example: $sql = 'SELECT * FROM  sales_flat_quote';
 
- 		$db = self::getDb($db_name);
 
- 		$result = $db->createCommand($sql,$data)
 
- 					->queryAll();
 
- 		return $result;
 
- 	}
 
- 	
 
- 	
 
- 	
 
- 	# 2.通过sql查看一条记录
 
- 	# example: CDB::findOneBySql('select * from sales_order_info where order_id = :order_id'
 
- 	#							,[':order_id'=>1 ]);
 
- 	public static function findOneBySql($sql,$data=[],$db_name=''){
 
- 		# example: $sql ='SELECT * FROM post WHERE id=1'
 
- 		$db = self::getDb($db_name);
 
- 		$result = $db->createCommand($sql,$data)
 
- 				->queryOne();
 
- 		return $result;
 
- 	}
 
- 	
 
- 	# 3.通过sql插入记录
 
- 	# $sql 	= "insert into sales_order_info (increment_id) values (:increment_id) ";
 
- 	# $data = ['increment_id'=>'eeeeeeeeee'];
 
- 	# $dd 	= DB::insertBySql($sql,$data);
 
- 	public static function insertBySql($sql,$data=[],$db_name=''){
 
- 		$db = self::getDb($db_name);
 
- 		$result = $db->createCommand($sql,$data)
 
- 				->execute();
 
- 		return $result;
 
- 	
 
- 	}
 
- 	
 
- 	# 4.通过sql更新
 
- 	# $sql = "update sales_order_info set increment_id = :iid where increment_id = :increment_id";
 
- 	# $data = ['iid'=>'ddd','increment_id'=>'eeeeeeeeee'];
 
- 	# $dd = DB::insertBySql($sql,$data);
 
- 	public static function updateBySql($sql,$data=[],$db_name=''){
 
- 		$db = self::getDb($db_name);
 
- 		$result = $db->createCommand($sql,$data)
 
- 				->execute();
 
- 		return $result;
 
- 	
 
- 	}
 
- 	
 
- 	# 5.通过sql删除
 
- 	# $sql = "delete from sales_order_info  where increment_id = :increment_id";
 
- 	# $data = ['increment_id'=>'eeeeeeeeee'];
 
- 	# $dd = DB::insertBySql($sql,$data);
 
- 	public static function deleteBySql($sql,$data=[],$db_name=''){
 
- 		$db = self::getDb($db_name);
 
- 		$result = $db->createCommand($sql,$data)
 
- 				->execute();
 
- 		return $result;
 
- 	
 
- 	}
 
- 	
 
- 	# 6.批量插入数据方式
 
- 	# $table 		= 'sales_order_info';
 
- 	# $columnsArr = ['increment_id','order_status'];
 
- 	# $valueArr 	= [
 
- 	# 				['Tom', 30],
 
- 	# 				['Jane', 20],
 
- 	# 				['Linda', 25]
 
- 	# 				];
 
- 	# DB::batchInsert($table,$columnsArr,$valueArr);
 
- 		
 
- 	public static function batchInsert($table,$columnsArr,$valueArr,$db_name=''){
 
- 		$db = self::getDb($db_name);
 
- 		$db->createCommand()
 
- 					->batchInsert($table,$columnsArr,$valueArr)
 
- 					->execute();
 
- 	
 
- 	}
 
- 	
 
- 	
 
- 	# 一:常见操作-数据表查询
 
- 	/*
 
- 	@单一查询,返回是一个对象,可通过数组的形式调用 $customer['quote_id'];
 
- 		还可以通过属性的方式 $customer->quote_id;
 
- 		$customer = Customer::findOne(['customer_id' => (int)$customer_id]);
 
- 	
 
- 	@全部查询:返回的是对象
 
- 		$customers = Customer::find()
 
- 			->where(['status' => Customer::STATUS_ACTIVE])
 
- 			->orderBy('id')
 
- 			->all();
 
- 	@全部查询:返回的是数组  (查询100-109行)
 
- 		$customers = Customer::find()
 
- 			->asArray()
 
- 			->where(['status' => Customer::STATUS_ACTIVE])
 
- 			->orderBy(['id' => SORT_ASC,'name' => SORT_DESC])
 
- 			->limit(10)
 
- 			->offset(100)
 
- 			->all();
 
- 	@查询个数:
 
- 		$count = Customer::find()
 
- 			->where(['status' => Customer::STATUS_ACTIVE])
 
- 			->count();
 
- 	@以id为索引的方式查询
 
- 		$customers = Customer::find()->indexBy('id')->all();
 
- 		
 
- 	@用原生的sql查询:(只能针对这一个表)
 
- 		$sql = 'SELECT * FROM customer';
 
- 		$customers = Customer::findBySql($sql)->all();	
 
- 		
 
- 	@批量获取数据(不常用,针对大数据)
 
- 		一次提取 10 个客户信息
 
- 		foreach (Customer::find()->batch(10) as $customers) {
 
- 			$customers 是 10 个或更少的客户对象的数组
 
- 		}
 
- 		一次提取 10 个客户并一个一个地遍历处理
 
- 		foreach (Customer::find()->each(10) as $customer) {
 
- 			$customer 是一个 ”Customer“ 对象
 
- 		}
 
- 		贪婪加载模式的批处理查询
 
- 		foreach (Customer::find()->with('orders')->each() as $customer) {
 
- 		}
 
- 	*/
 
- 	
 
- 	
 
- 	# 常见操作2:数据表插入
 
- 	/*
 
- 	@插入新客户的记录
 
- 		$customer = new Customer();
 
- 		$customer->name = 'James';
 
- 		$customer->email = 'james@example.com';
 
- 		//等同于 $customer->insert();
 
- 		$customer->save();  
 
- 	
 
- 	@通过post数组的方式赋值
 
- 		$model = new Customer;
 
- 		if ($model->load(Yii::$app->request->post()) && $model->save()) {
 
- 		
 
- 		}
 
- 		####由于AR继承自yii\base\Model,所以它同样也支持Model的数据输入、验证等特性。例如,你可以声明一个rules方法用来覆盖掉yii\base\Model::rules()里的;你也可以给AR实例批量赋值;你也可以通过调用yii\base\Model::validate()执行数据验证。
 
- 		####当你调用 save()、insert()、update() 这三个方法时,会自动调用yii\base\Model::validate()方法。如果验证失败,数据将不会保存进数据库。
 
- 	
 
- 	*/
 
- 	
 
- 	# 常见操作3:数据表更新
 
- 	/*
 
- 	@更新现有客户记录
 
- 		$customer = Customer::findOne(['id' => 1]);
 
- 		$customer->email = 'james@example.com';
 
- 		//等同于 $customer->update();
 
- 		$customer->save();  
 
- 		
 
- 	@所有客户的age(年龄)字段加1:
 
- 		Customer::updateAllCounters(['age' => 1]);		
 
- 	*/
 
- 	
 
- 	
 
- 	# 常见操作4:数据表数据删除
 
- 	/*
 
- 	@删除已有客户记录
 
- 		$customer = Customer::findOne(['id' => 1]);
 
- 		$customer->delete();
 
- 	@删除多个年龄大于20,性别为男(Male)的客户记录
 
- 		Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']);
 
- 			
 
- 			
 
- 	*/
 
- 	
 
- 	# 常见操作5:读取默认值
 
- 	/*
 
- 	
 
- 		你的表列也许定义了默认值。有时候,你可能需要在使用web表单的时候给AR预设一些值。
 
- 		如果你需要这样做,可以在显示表单内容前通过调用
 
- 		loadDefaultValues()方法来实现: 
 
- 		php $customer = new Customer();
 
- 		$customer->loadDefaultValues(); // ... 渲染 $customer 的 HTML 表单 ... `
 
- 	*/
 
- 	
 
- 	/*
 
- 	 常见操作6:事务操作
 
- 		# 开始事务
 
- 		$innerTransaction = Yii::$app->db->beginTransaction();
 
- 		try {
 
- 			$innerTransaction->commit();
 
- 		} catch (Exception $e) {
 
- 			$innerTransaction->rollBack();
 
- 		}
 
- 	
 
- 	*/
 
- 	
 
- 	 
 
- 	/*
 
- 	各种条件查询。 
 
- 	# where
 
-     where('status=1') 
 
-     where('status=:status', [':status' => $status])
 
-     where([  
 
-         'status' => 10,  
 
-         'type' => null,  
 
-         'id' => [4, 8, 15],  
 
-     ]) 
 
-     -------  
 
-     $userQuery = (new Query())->select('id')->from('user');  
 
-     // ...WHERE `id` IN (SELECT `id` FROM `user`)  
 
-     $query->...->where(['id' => $userQuery])->...  
 
-     --------  
 
-     ['and', 'id=1', 'id=2'] //id=1 AND id=2  
 
-     ['and', 'type=1', ['or', 'id=1', 'id=2']] //type=1 AND (id=1 OR id=2)  
 
-     ['between', 'id', 1, 10] //id BETWEEN 1 AND 10  
 
-     ['not between', 'id', 1, 10] //not id BETWEEN 1 AND 10  
 
-     ['in', 'id', [1, 2, 3]] //id IN (1, 2, 3)  
 
-     ['not in', 'id', [1, 2, 3]] //not id IN (1, 2, 3)  
 
-     ['like', 'name', 'tester'] //name LIKE '%tester%'  
 
-     ['like', 'name', ['test', 'sample']] //name LIKE '%test%' AND name LIKE '%sample%'  
 
-     ['not like', 'name', ['or', 'test', 'sample']] //not name LIKE '%test%' OR not name LIKE '%sample%'  
 
-     ['exists','id', $userQuery] //EXISTS (sub-query) | not exists  
 
-     ['>', 'age', 10] //age>10  
 
- 	
 
- 	得到刚插入的id
 
- 	order_id = Yii::$app->db->getLastInsertID();
 
- 	
 
- 	$sql = 'SELECT * FROM  sales_flat_quote';
 
- 	Yii::$app->db->createCommand($sql,[])
 
- 					->queryAll();
 
- 		
 
- 		
 
- 	*/
 
- 	
 
- }
 
 
  |