一、简单的查询
[[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;});//其实是数组过滤