laravel数据库相关操作

SQL查询

配置好数据库连接后,可以使用 DB facade 运行查询。DB facade 为每种类型的查询提供了方法:select、update、insert、delete 和 statement。

select查询数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Illuminate\Support\Facades\DB;

//select方法一
$users = DB::select('select * from users where active = ?', [1]);

//(1)传递到 select 方法的第一个参数是一个原生的 SQL 查询,而第二个参数则是传递需要绑定到查询中的参数值。通常,这些是 where 子句约束的值。参数绑定提供了对防止 SQL 注入的保护。
//(2)select 方法将始终返回一个数组。数组中的每个结果都是一个PHP StdClass 对象,可以像下面这样访问结果的值:

foreach ($users as $user) {
echo $user->name;
}

//select方法二
$results = DB::select('select * from users where id = :id', ['id' => 1]);

增删改方法

1
2
3
4
5
6
7
8
9
10
11
12
use Illuminate\Support\Facades\DB;

//可以在 DB facade 上使用 insert 方法来执行 insert 语句。与 select 一样
//该方法将原生 SQL 查询作为其第一个参数,并将其绑定的数据作为第二个参数:
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

//update 方法用于更新数据库中的现有记录。该方法会返回受该语句影响的行数:
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);


//delete 方法用于删除数据库中记录。与 update 一样,会返回受该语句影响的行数:
$deleted = DB::delete('delete from users');

laravel数据库事务

可以在 DB facade 上使用 transaction 方法来运行数据库事务中的一组操作。如果在事务 Closure 中发生了异常,事务将自动回滚。而如果 Closure 成功执行,事务将自动被提交。也就是说,使用数据库事务,你就不需要在数据库语句执行发生异常时手动回滚或提交。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// (1)如果在事务 Closure 中发生了异常,事务将自动回滚,否则事务自动提交
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);

DB::table('posts')->delete();
});

// (2)处理死锁,第二个参数定义在发生死锁时应该重新尝试事务的次数。一旦尝试次数都用尽了,就会抛出一个异常:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);

DB::table('posts')->delete();
}, 5);

// (3)手动开始一个事务,并且能够完全控制回滚和提交
DB::beginTransaction();

//可以通过 rollBack 方法回滚事务:
DB::rollBack();

//最后记得要通过 commit 方法提交事务:
DB::commit();

注意:DB facade 的事务方法也适用于 查询语句构造器 和 Eloquent ORM 的事务。