一, 简单的查询
[[one()]]: 根据查询结果返回查询的第一条记录.
[[all()]]: 根据查询结果返回所有记录.
[[count()]]: 返回记录的数量.
[[sum()]]: 返回指定列的总数.
[[average()]]: 返回指定列的平均值.
[[min()]]: 返回指定列的最小值.
[[max()]]: 返回指定列的最大值.
[[scalar()]]: 返回查询结果的第一行中的第一列的值.
[[column()]]: 返回查询结果中的第一列的值.
[[exists()]]: 返回一个值, 该值指示查询结果是否有数据.
[[where()]]: 添加查询条件
[[with()]]: 该查询应执行的关系列表.
[[indexBy()]]: 根据索引的列的名称查询结果.
[[asArray()]]: 以数组的形式返回每条记录.
二, 关联查询
[[ActiveRecord::hasOne()]]: 返回对应关系的单条记录
return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);//Model 的字段放在后面
[[ActiveRecord::hasMany()]]: 返回对应关系的多条记录
return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
三, 批量插入
- Yii::$App->db->createCommand()->batchInsert(UserModel::tableName(), ['user_id','username'], [
- ['1','test1'],
- ['2','test2'],
- ['3','test3'],
- ])->execute();
四, 查询打印 sql 语句
$query->createCommand()->getRawSql();
五, 事务
- $transaction = Yii::$App->db->beginTransaction();
- try {
- //... SQL executions
- $transaction->commit();
- } catch (Exception $e) {
- $transaction->rollBack();
- }
六, 关于日期格式化查询
- use yii\db\Expression;// 引入 Expression
- $agent_trace->select(new Expression("sum(trace_number) number,DATE_FORMAT(purchase_time,'$this->date_type') time"))->where(['and',['>=',"DATE_FORMAT($param,'$this->date_type')",$start_time],['<=',"DATE_FORMAT($param,'$this->date_type')",$end_time]];)->groupBy('time')->asArray()->all();
七, 查询结果排序问题
- $order = explode(' ',$order);
- $sort = array_column($need_data,$order['0']);
- if($order['0']=='time')
- array_multisort($sort,constant('SORT_'.strtoupper($order['1'])),$need_data);
- else
- array_multisort($sort,constant('SORT_'.strtoupper($order['1'])),SORT_NUMERIC,$need_data);
八, 分页功能
- $pagination = new Pagination(['totalCount' => count($need_data)]);
- $pagination->pageSize=$request->post('page_size', 100);
- $pagination->setPage($request->post('page', 1)-1);
- if ($pagination->pageSize>50) $pagination->pageSize=100;
- $new_data = array_slice($need_data, ($request->post('page', 1)-1)*$pagination->pageSize, $pagination->pageSize);
九, 根据数组模糊搜索
- $this->filter['key'] = trim($key);
- $data = array_filter($data,function($data){
- return strpos($data['agent_name'], $this->filter['key'])!==false;
- });// 其实是数组过滤
来源: http://www.jianshu.com/p/8a6f1e5f8421