📅  最后修改于: 2023-12-03 15:32:34.838000             🧑  作者: Mango
在Laravel中,我们通常使用查询构建器来执行数据库查询。但是,有时候我们需要使用原生的SQL查询语句来执行查询,例如,当我们需要查询复杂的联合数据或使用存储过程时。在这种情况下,我们可以使用Laravel的DB门面来执行原生SQL查询。在本文中,我们将介绍如何在 Laravel 中使用 DB 门面来执行原生 SQL 查询,并在代码片段中提供示例。
要执行原生SQL查询语句,我们可以使用Laravel的DB门面。DB门面提供了select
方法来执行SELECT查询。以下是一个基本示例,该示例从users
表中检索所有记录并以对象数组的形式返回结果:
$results = DB::select('SELECT * FROM users');
可以将查询语句中的参数绑定到查询中,以避免SQL注入攻击:
$results = DB::select('SELECT * FROM users WHERE id = ?', [1]);
我们还可以使用命名绑定:
$results = DB::select('SELECT * FROM users WHERE name = :name', ['name' => 'John']);
如果我们只需要从查询结果中获取单个值,则可以使用selectOne
方法。以下是一个示例:
$user = DB::selectOne('SELECT * FROM users WHERE id = ?', [1]);
如果查询结果为空,则selectOne
方法将返回null
。
除了select
和selectOne
方法之外,我们还可以使用以下方法来执行其他类型的查询:
insert
: 执行INSERT查询语句并返回插入的ID。update
: 执行UPDATE查询语句并返回受影响的行数。delete
: 执行DELETE查询语句并返回受影响的行数。statement
: 执行任何其他类型的查询语句。下面是一个使用insert
方法向users
表中插入新记录的示例:
$id = DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John', 'john@example.com']);
当我们使用insert
、update
或delete
方法执行查询时,我们可以使用affectedRows
方法来获取受影响的行数。以下是一个示例:
$rows = DB::delete('DELETE FROM users WHERE id = ?', [1]);
$affectedRows = DB::affectedRows();
在Laravel中执行原生SQL查询非常简单,我们可以使用DB门面提供的各种方法来执行各种类型的查询。使用查询参数绑定以避免SQL注入攻击,并始终检查返回结果,以确保查询成功执行。