Laravel如何使用数据库事务及捕获事务失败

发布网友 发布时间:2022-04-23 09:06

我来回答

1个回答

热心网友 时间:2022-04-06 09:18

配置完数据库连接,就可以使用DB类进行查询了。
查询
$results = DB::select('select * from users where id = ?', array(1));

select方法会以数组形式返回查询结果。
插入
DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));

更新
DB::update('update users set votes = 100 where name = ?', array('John'));

删除
DB::delete('delete from users');

注意:update和delete语句返回受影响的行数。
通用语句
DB::statement('drop table users');

监听Query事件
DB::listen(function($sql, $bindings, $time)
{
//
});

数据库事务
DB::transaction(function()
{
DB::table('users')->update(array('votes' => 1));
DB::table('posts')->delete();
});

注意:transaction闭包中的任何异常将会导致事务自动回滚。
有时候也许你想自己开启事务:
DB::beginTransaction();

你也可以自己回滚事务:
DB::rollback();

最后,你可以通过commit方法提交事务:
DB::commit();

多个数据库连接访问
当使用多个数据库连接时,可以通过DB::connection方法访问它们:
$users = DB::connection('foo')->select(...);

你可以通过PDO实例访问原生连接:
$pdo = DB::connection()->getPdo();

有时候你需要重连数据库:
DB::reconnect('foo');

如果因为超出PDO实例的最大连接数*而要断开连接,使用disconnect方法:
DB::disconnect('foo');

查询日志
默认情况下,Laravel使用日志记录当前请求的所有数据库查询操作,但是某些时候,比如插入大量数据,会引起应用使用过量内存。为了关闭日志,可以使用disableQuery方法:
DB::connection()->disableQueryLog();

获取查询日志记录,可以用过getQuery方法:
$queries = DB::getQueryLog();

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com