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();
-
-
- */
-
- }
|