数据库:入门
Introduction
连接到数据库和运行查询是一个简单的过程,通过使用原始 SQL、查询生成器 或者活动记录模型.管理数据库表和填充种子数据由迁移和播种过程.
原始 SQL 和使用查询生成器会执行得更快,应该用于简单的任务。 Active Record 是流行框架 Ruby On Rails 使用的一种方法。它允许一个简单的界面来执行重复性任务,如创建、读取、更新和删除数据库记录。您可以了解更多关于维基百科上的活动记录模式.
Configuration
您的应用程序的数据库配置位于config/database.php
文件。在此文件中,您可以定义所有数据库连接,并指定默认情况下应使用哪个连接。此文件中提供了所有受支持的数据库系统的示例。
读/写连接
有时您可能希望对 SELECT 语句使用一个数据库连接,对 INSERT、UPDATE 和 DELETE 语句使用另一个数据库连接。无论您使用的是原始查询、查询构建器还是模型,都可以轻松指定使用哪个连接。
要了解应该如何配置读/写连接,让我们看一下这个例子:
'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '196.168.1.2'
],
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
请注意,已将两个键添加到配置数组中:read
和write
.这两个键都具有包含单个键的数组值:host
.其余的数据库选项read
和write
连接将从主要合并mysql
大批。
我们只需要将物品放在read
和write
arrays 如果我们希望覆盖主数组中的值。所以,在这种情况下,192.168.1.1
将用作“读取”连接,而192.168.1.2
将用作“写”连接。主目录中的数据库凭据、前缀、字符集和所有其他选项mysql
数组将在两个连接之间共享。
运行原始 SQL 查询
配置数据库连接后,您可以使用Db
正面。这Db
facade 为每种类型的查询提供方法:select
,update
,insert
,delete
, 和statement
.
运行选择查询
要运行基本查询,我们可以使用select
上的方法Db
正面:
$users = Db::select('select * from users where active = ?', [1]);
第一个参数传递给select
方法是原始 SQL 查询,而第二个参数是需要绑定到查询的任何参数绑定。通常,这些是where
子句约束。参数绑定提供了针对 SQL 注入的保护。
这select
方法将始终返回一个array
结果。数组中的每个结果都是一个 PHPstdClass
对象,允许您访问结果的值:
foreach ($users as $user) {
echo $user->name;
}
使用命名绑定
而不是使用?
为了表示您的参数绑定,您可以使用命名绑定执行查询:
$results = Db::select('select * from users where id = :id', ['id' => 1]);
运行插入语句
执行一个insert
声明,你可以使用insert
上的方法Db
正面。喜欢select
,此方法将原始 SQL 查询作为其第一个参数,并将绑定作为第二个参数:
Db::insert('insert into users (id, name) values (?, ?)', [1, 'Joe']);
运行更新语句
这update
方法应该用于更新数据库中的现有记录。该方法将返回受该语句影响的行数:
$affected = Db::update('update users set votes = 100 where name = ?', ['John']);
运行删除语句
这delete
方法应该用于从数据库中删除记录。喜欢update
,将返回删除的行数:
$deleted = Db::delete('delete from users');
运行一般声明
某些数据库语句不应返回任何值。对于这些类型的操作,您可以使用statement
上的方法Db
正面:
Db::statement('drop table users');
多个数据库连接
使用多个连接时,您可以通过访问每个连接connection
上的方法Db
正面。这name
传给了connection
方法应对应于您的config/database.php
配置文件:
$users = Db::connection('foo')->select(...);
您还可以使用以下方法访问原始的底层 PDO 实例getPdo
连接实例上的方法:
$pdo = Db::connection()->getPdo();
数据库事务
要在数据库事务中运行一组操作,您可以使用transaction
上的方法Db
正面。如果在事务中抛出异常Closure
,事务将自动回滚。如果Closure
执行成功,事务会自动提交。您无需担心在使用transaction
方法:
Db::transaction(function () {
Db::table('users')->update(['votes' => 1]);
Db::table('posts')->delete();
});
手动使用事务
如果您想手动开始事务并完全控制回滚和提交,您可以使用beginTransaction
上的方法Db
正面:
Db::beginTransaction();
您可以通过回滚事务rollBack
方法:
Db::rollBack();
最后,您可以通过commit
方法:
Db::commit();
数据库事件
如果你想接收你的应用程序执行的每个 SQL 查询,你可以使用listen
方法。此方法对于记录查询或调试很有用。
Db::listen(function($sql, $bindings, $time) {
//
});
就像活动报名,您可以在boot
一个方法插件注册文件.或者,插件可以提供一个名为init.php 在可用于放置此逻辑的插件目录中。
查询记录
启用查询日志记录后,将在内存中保存为当前请求运行的所有查询的日志。打电话给enableQueryLog
启用此功能的方法。
Db::connection()->enableQueryLog();
要获取已执行查询的数组,您可以使用getQueryLog
方法:
$queries = Db::getQueryLog();
但是,在某些情况下,例如插入大量行时,这会导致应用程序使用过多的内存。要禁用日志,您可以使用disableQueryLog
方法:
Db::connection()->disableQueryLog();
NOTE:为了更快地调试,调用
trace_sql
辅助功能 反而。