您好,欢迎访问一九零五行业门户网

Yii2.0数据库操作增删改查详解

1.简单查询:
]: 根据查询结果返回查询的第一条记录。 [[all()]]: 根据查询结果返回所有记录。 [[count()]]: 返回记录的数量。 [[sum()]]: 返回指定列的总数。 [[average()]]: 返回指定列的平均值。 [[min()]]: 返回指定列的最小值。 [[max()]]: 返回指定列的最大值。 [[scalar()]]: 返回查询结果的第一行中的第一列的值。 [[column()]]: 返回查询结果中的第一列的值。 [[exists()]]: 返回一个值,该值指示查询结果是否有数据。 [[where()]]: 添加查询条件 [[with()]]: 该查询应执行的关系列表。 [[indexby()]]: 根据索引的列的名称查询结果。 [[asarray()]]: 以数组的形式返回每条记录。 [code=php]customer::find()->one(); 此方法返回一条数据; customer::find()->all(); 此方法返回所有数据; customer::find()->count(); 此方法返回记录的数量; customer::find()->average(); 此方法返回指定列的平均值; customer::find()->min(); 此方法返回指定列的最小值 ; customer::find()->max(); 此方法返回指定列的最大值 ; customer::find()->scalar(); 此方法返回值的第一行第一列的查询结果; customer::find()->column(); 此方法返回查询结果中的第一列的值; customer::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行;
customer::find()->asarray()->one(); 以数组形式返回一条数据; customer::find()->asarray()->all(); 以数组形式返回所有数据;
customer::find()->where($condition)->asarray()->one(); 根据条件以数组形式返回一条数据; customer::find()->where($condition)->asarray()->all(); 根据条件以数组形式返回所有数据;
customer::find()->where($condition)->asarray()->orderby('id desc')->all(); 根据条件以数组形式返回所有数据,并根据id倒序;
2.关联查询:
[[activerecord::hasone()]]:返回对应关系的单条记录 [[activerecord::hasmany()]]:返回对应关系的多条记录[/code]
应用实例:
); } public function getcountry() { //客户和国家是一对一的关系所以用hasone return $this->hasone(countrysmodel::classname(), ['id'=>'country_id']); } .... } // 查询客户与他们的订单和国家 customermodel::find()->with('orders', 'country')->all(); // 查询客户与他们的订单和订单的发货地址 customermodel::find()->with('orders.address')->all(); // 查询客户与他们的国家和状态为1的订单 customermodel::find()->with([ 'orders' => function ($query) { $query->andwhere('status = 1'); }, 'country', ])->all(); :with中的orders对应getorders <b>常见问题:</b> 1.在查询时加了->select();如下,要加上order_id,即关联的字段(比如:order_id)比如要在select中,否则会报错:undefined index order_id // 查询客户与他们的订单和国家 customermodel::find()->select('order_id')->with('orders', 'country')->all();
)->one(); // 查询年龄为30,状态值为1的客户 $customer = customer::findone(['age' => 30, 'status' => 1]); $customer = customer::find()->where(['age' => 30, 'status' => 1])->one(); // 查询key值为10的所有客户 $customers = customer::findall(10); $customers = customer::find()->where(['id' => 10])->all(); // 查询key值为10,11,12的客户 $customers = customer::findall([10, 11, 12]); $customers = customer::find()->where(['id' => [10, 11, 12]])->all(); // 查询年龄为30,状态值为1的所有客户 $customers = customer::findall(['age' => 30, 'status' => 1]); $customers = customer::find()->where(['age' => 30, 'status' => 1])->all(); <b>where()条件:</b> $customers = customer::find()->where($cond)->all(); $cond写法举例: // sql: (type = 1) and (status = 2). $cond = ['type' => 1, 'status' => 2] // sql:(id in (1, 2, 3)) and (status = 2) $cond = ['id' => [1, 2, 3], 'status' => 2] //sql:status is null $cond = ['status' => null] <b>[[]]</b>:将不同的条件组合在一起,用法举例: //sql:`id=1 and id=2` $cond = ['and', 'id=1', 'id=2'] //sql:`type=1 and (id=1 or id=2)` $cond = ['and', 'type=1', ['or', 'id=1', 'id=2']]
[[or]]:
], ['id' => [1, 2, 3]] <b>[[]]:</b> //sql:`not (attribute is null)` $cond = ['not', ['attribute' => null]]
[[between]]: not between 用法相同
<b>[[]]: </b>not in 用法类似 //sql:`id in (1, 2, 3)` $cond = ['in', 'id', [1, 2, 3]] //in条件也适用于多字段 $cond = ['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]] //也适用于内嵌sql语句 $cond = ['in', 'user_id', (new query())->select('id')->from('users')->where(['active' => 1])]
[[like]]:
//sql:`name like '%test%' and name like '%sample%'` $cond = ['like', 'name', ['test', 'sample']] //sql:`name like '%tester'` $cond = ['like', 'name', '%tester', false] <b>[[]]: </b>not exists用法类似 //sql:exists (select "id" from "users" where "active"=1) $cond = ['exists', (new query())->select('id')->from('users')->where(['active' => 1])]
此外,您可以指定任意运算符如下
//sql:`id >= 10` $cond = ['>=', 'id', 10] //sql:`id != 10` $cond = ['!=', 'id', 10]
常用查询:
// where admin_id >= 10 limit 0,10 user::find()->select('*')->where(['>=', 'admin_id', 10])->offset(0)->limit(10)->all() // select `id`, (select count(*) from `user`) as `count` from `post` $subquery = (new query())->select('count(*)')->from('user'); $query = (new query())->select(['id', 'count' => $subquery])->from('post'); // select distinct `user_id` ... user::find()->select('user_id')->distinct();
更新:
//update(); //runvalidation boolen 是否通过validate()校验字段 默认为true //attributenames array 需要更新的字段 $model->update($runvalidation , $attributenames); //updateall(); //update customer set status = 1 where status = 2 customer::updateall(['status' => 1], 'status = 2'); //update customer set status = 1 where status = 2 and uid = 1; customer::updateall(['status' => 1], ['status'=> '2','uid'=>'1']);
删除:
$model = customer::findone($id); $model->delete(); $model->deleteall(['id'=>1]);
批量插入:
yii::$app->db->createcommand()->batchinsert(usermodel::tablename(), ['user_id','username'], [ ['1','test1'], ['2','test2'], ['3','test3'], ])->execute();
查看执行sql
//usermodel $query = usermodel::find()->where(['status'=>1]); echo $query->createcommand()->getrawsql();
以上就是yii2.0数据库操作增删改查详解的内容。
其它类似信息

推荐信息