Yii2.0数据库常规操作

一、简单的查询

[[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;});//其实是数组过滤

你可能感兴趣的:(Yii2.0数据库常规操作)