数据库:入门

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'    => '',
],

请注意,已将两个键添加到配置数组中:readwrite.这两个键都具有包含单个键的数组值:host.其余的数据库选项readwrite 连接将从主要合并mysql 大批。

我们只需要将物品放在readwrite 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();

NOTE: 使用Db facade 的事务方法也控制事务查询生成器模型查询.

数据库事件

如果你想接收你的应用程序执行的每个 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 辅助功能 反而。

豫ICP备18041297号-2