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();
内容版权声明:除非注明,否则皆为本站原创文章。
