本文实例讲述了Yii2数据库操作常用方法。分享给大家供大家参考,具体如下:
查询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// find the customers whose primary key value is 10
$customers = Customer::findAll(10);
$customer = Customer::findOne(10);
// the above code is equivalent to:
$customers = Customer::find()->where([ 'id' => 10])->all();
// find the customers whose primary key value is 10, 11 or 12.
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where([ 'IN' , 'id' ,[10,11,12]])->all();
// the above code is equivalent to:
$customers = Customer::find()->where([ 'id' => [10, 11, 12]])->all();
// find customers whose age is 30 and whose status is 1
$customers = Customer::findAll([ 'age' => 30, 'status' => 1]);
// the above code is equivalent to:
$customers = Customer::find()->where([ 'age' => 30, 'status' => 1])->all();
// use params binding
$customers = Customer::find()->where( 'age=:age AND status=:status' )->addParams([ ':age' =>30, ':status' =>1])->all();
// use index
$customers = Customer::find()->indexBy( 'id' )->where([ 'age' => 30, 'status' => 1])->all();
// get customers count
$count = Customer::find()->where([ 'age' => 30, 'status' => 1])-> count ();
// add addition condition
$customers = Customer::find()->where([ 'age' => 30, 'status' => 1])->andWhere( 'score > 100' )->orderBy( 'id DESC' )->offset(5)->limit(10)->all();
// find by sql
$customers = Customer::findBySql( 'SELECT * FROM customer WHERE age=30 AND status=1 AND score>100 ORDER BY id DESC LIMIT 5,10' )->all();
|
修改:
1
2
3
4
5
6
|
// update status for customer-10
$customer = Customer::findOne(10);
$customer ->status = 1;
$customer ->update();
// the above code is equivalent to:
Customer::updateAll([ 'status' => 1], 'id = :id' ,[ ':id' =>10]);
|
删除:
1
2
3
4
|
// delete customer-10
Customer::findOne(10)-> delete ();
// the above code is equivalent to:
Customer::deleteAll([ 'status' => 1], 'id = :id' ,[ ':id' =>10]);
|
----------------使用子查询----------------------
1
2
3
|
$subQuery = ( new Query())->select( 'COUNT(*)' )->from( 'customer' );
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = ( new Query())->select([ 'id' , 'count' => $subQuery ])->from( 'customer' );
|
----------------手写SQL-----------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// select
$customers = Yii:: $app ->db->createCommand( 'SELECT * FROM customer' )->queryAll();
// update
Yii:: $app ->db->createCommand()->update( 'customer' ,[ 'status' =>1], 'id=10' )->execute();
// delete
Yii:: $app ->db->createCommand()-> delete ( 'customer' , 'id=10' )->execute();
//transaction
// outer
$transaction1 = $connection ->beginTransaction();
try {
$connection ->createCommand( $sql1 )->execute();
// internal
$transaction2 = $connection ->beginTransaction();
try {
$connection ->createCommand( $sql2 )->execute();
$transaction2 ->commit();
} catch (Exception $e ) {
$transaction2 ->rollBack();
}
$transaction1 ->commit();
} catch (Exception $e ) {
$transaction1 ->rollBack();
}
|
---------------主从配置----------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[
'class' => 'yii\db\Connection' ,
// master
'dsn' => 'dsn for master server' ,
'username' => 'master' ,
'password' => '' ,
// slaves
'slaveConfig' => [
'username' => 'slave' ,
'password' => '' ,
'attributes' => [
// use a smaller connection timeout
PDO::ATTR_TIMEOUT => 10,
],
],
'slaves' => [
[ 'dsn' => 'dsn for slave server 1' ],
[ 'dsn' => 'dsn for slave server 2' ],
[ 'dsn' => 'dsn for slave server 3' ],
[ 'dsn' => 'dsn for slave server 4' ],
],
]
|
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。