foreach ($users as $user) { echo $user->name; }
使用命名绑定
除了使用?占位符来代表参数绑定外,还可以使用命名绑定来执行查询:
$results = DB::select('select * from users where id = :id', ['id' => 1]);
运行插入语句
使用DB门面的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');
运行一个通用语句
有些数据库语句不返回任何值,对于这种类型的操作,可以使用DB门面的statement方法:
DB::statement('drop table users');
监听查询事件
如果你想要获取应用中每次 SQL 语句的执行,可以使用listen方法,该方法对查询日志和调试非常有用,你可以在服务提供者中注册查询监听器:
<?php namespace App\Providers; use DB; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{ /** * 启动所有应用服务 * * @return void */ public function boot() { DB::listen(function($query) { // $query->sql // $query->bindings // $query->time }); } /** * 注册服务提供者 * * @return void */ public function register() { // } }
3、数据库事务
想要在一个数据库事务中运行一连串操作,可以使用DB门面的transaction方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用transaction方法时不需要担心手动回滚或提交:
DB::transaction(function () { DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete(); });
手动使用事务
如果你想要手动开始事务从而对回滚和提交有一个完整的控制,可以使用DB门面的beginTransaction方法:
DB::beginTransaction();
内容版权声明:除非注明,否则皆为本站原创文章。