Laravel操作数据库 - 原生SQL语句

Posted 一拳超超人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel操作数据库 - 原生SQL语句相关的知识,希望对你有一定的参考价值。

Laravel支持多种数据库,包括mysql、Postgres、SQLite和SQL Server,在Laravel中连接数据库和查询数据库都非常简单,我们可以使用多种方式与数据库进行交互,包括
原生SQL语句、查询构建器以及Eloquent ORM。
本节我们先演示如何使用原生SQL在Laravel应用中对数据库进行增删改查。




原生SQL语句
DB::select('select * from users where id = ?', [1]);
DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )',
        [1, 'Laravel','laravel@test.com','123']);
DB::update('update users set name="LaravelAcademy" where name = ?', ['Academy']);
DB::delete('delete from users');
监听查询事件

除此之外,我们还可以通过DB门面的listen方法监听查询事件,比如我们在记录日志和调试的时候这会给我们确定问题提供便利,可以在服务提供者的boot方法中注册该监听器,例如我们在AppServiceProvider的boot方法中定义监听器如下:

/**
* 启动所有应用服务
*
* @return void
*/
public function boot()

    DB::listen(function($sql, $bindings, $time)
        echo 'SQL语句执行:'.$sql.',参数:'.json_encode($bindings).',耗时:'.$time.'ms';
    );


这样我们运行如下SQL语句:

DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )',
    [3, 'LaravelAcademy','laravel-academy@test.com','123']);

则浏览器会输出如下内容:

SQL语句执行:insert into users (id, name, email, password) values (?, ?, ? , ? ),参数:[3,"LaravelAcademy","laravel-academy@test.com","123"],耗时:1.26ms
数据库事务

很多时候,我们需要执行一连串操作,而其中任何一个操作出错则整个流程失败,需要回退重来,这个时候我们就要用到数据库事务。

DB门面提供两种方式支持数据库事务,一种是调用transaction方法然后传入闭包作为参数,我们将需要进行事务操作的逻辑放到闭包函数内:

DB::transaction(function ()
    DB::table('users')->update(['id' => 1]);
    DB::table('posts')->delete();
);

另一种是 beginTransaction、 rollBack和 commit三个方法一起使用从而构建一个完整的事务操作:

DB::beginTransaction();
if($somethingIsFailed)
    DB::rollback();
    return false;

DB::commit();

以上是关于Laravel操作数据库 - 原生SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp 和 laravel使用sql语句操作db和源码浅析

Laravel 各版本- 原生SQL打印之SQL监听 --方法

laravel orm进行增删改查

在线教育案例Laravel当中的DB类操作数据库

laravel数据库操作

043:Django使用原生SQL语句操作数据库