一、新增
1、使用save()
$model = new User();
$model->name = 'test';
$model->phone = '13000000000';
$model->email = '123456@qq.com';
$model->save();
2、使用createCommand 原生sql
$sql = "insert into user (name, phone, email) values ('test', '13000000000', '123456@qq.com')";
Yii::$app->db->createCommand($sql)->execute();
3、使用createCommand insert
Yii::$app->db->createCommand()->insert('user', [ 'name' => 'test',
'phone' => '13000000000',
'email' => '123456@qq.com' ])->execute();
4、批量插入
Yii::$app->db->createCommand()->batchInsert('user', ['name', 'phone', 'email'], [
['test1', '13000000000', '123456@qq.com'], ['test2', '13000000001', '234567@qq.com']
])->execute();
5、使用save()并校验参数正确性
$data = [ 'name' => 'test',
'phone' => '13000000000',
'email' => '123456@qq.com' ]; $model = new User(); // 将数据填充到模型的属性中
$model->load($data, ''); // 等效于下面这样:
// $model->attributes = $data;
// 或者
// $model->setAttributes($data);
if ($model->validate()) { // 通过验证
$model->save();
} else { // 验证失败: $errors 是一个包含错误信息的数组
$errors = $model->errors;
}
二、删除
1、使用delete()
$user = User::find()->where(['name' => 'test'])->one(); $user->delete();
2、使用deleteAll()批量删除
User::deleteAll(['name' => 'test']);
3、使用createCommand delete()
Yii::$app->db->createCommand()->delete('user', ['name' => 'test'])->execute();
4、使用createCommand 原生sql
$sql = "delete from user where name = 'test'";
Yii::$app->db->createCommand($sql)->execute();
三、更新
1、使用update()
$user = User::find()->where(['name' => 'test'])->one();
$user->phone = '13100000000';
$user->update(); // 或者 $user->save();
2、使用updateAll()
User::updateAll(['phone' => '13100000000'], ['name' => 'test']);
3、使用createCommand update()
Yii::$app->db->createCommand()->update('user', ['phone' => '13100000000'], ['name' => 'test'])->execute();
4、使用createCommand 原生sql
$sql = "update user set phone = '13100000000' where name = 'test'";
Yii::$app->db->createCommand($sql)->execute();
四、查询
1、使用model
// 查询一条记录
User::find()->select(['name', 'phone', 'email'])
->where(['phone' => '13000000000'])
->andWhere(['like', 'name', 'test'])
->one();
// 查询一条记录数组返回
User::find()->where(['name' => 'test'])->asArray()->one();
// 查询所有记录
User::find()->where(['name' => 'test'])->all();
// 查询所有记录数组返回
User::find()->where(['name' => 'test'])->asArray()->all();
2、使用createCommand
// 查询一条记录
Yii::$app->db->createCommand("select * from user where name = :name and phone = :phone")->bindValues([':name' => 'test', ':phone' => '13000000000'])->queryOne();
// 查询所有记录
Yii::$app->db->createCommand("select * from user where name = :name and phone = :phone")->bindValues([':name' => 'test', ':phone' => '13000000000'])->queryAll();
3、使用yii\db\Query()
(new \yii\db\Query())->from('user')->where(['name' => 'test'])->all();
4、子查询
$subQuery = (new \yii\db\Query())->select(['id'])->from('user')->where(['like', 'name', 'test'])->all();
(new \yii\db\Query())->from('user')->where(['in', 'id', $subQuery])->all();
5、yii2查看sql语句
$query = User::find()
->where(['id'=>[1,2,3,4])
->select(['username'])
// get the AR raw sql in YII2
$commandQuery = clone $query;
echo $commandQuery->createCommand()->getRawSql();
$users = $query->all();