Skip to content

基本数据库使用

配置

Laravel 使得连接数据库和运行查询变得极其简单。数据库配置文件是 app/config/database.php。在这个文件中,您可以定义所有的数据库连接,并指定默认使用哪个连接。该文件中提供了所有支持的数据库系统的示例。

目前,Laravel 支持四种数据库系统:MySQL、Postgres、SQLite 和 SQL Server。

读/写连接

有时您可能希望使用一个数据库连接进行 SELECT 语句,而使用另一个连接进行 INSERT、UPDATE 和 DELETE 语句。Laravel 使这变得轻而易举,无论您使用原始查询、查询构建器还是 Eloquent ORM,都会自动使用正确的连接。

要查看如何配置读/写连接,让我们看一下这个示例:

php
'mysql' => array(
	'read' => array(
		'host' => '192.168.1.1',
	),
	'write' => array(
		'host' => '196.168.1.2'
	),
	'driver'    => 'mysql',
	'database'  => 'database',
	'username'  => 'root',
	'password'  => '',
	'charset'   => 'utf8',
	'collation' => 'utf8_unicode_ci',
	'prefix'    => '',
),

请注意,配置数组中添加了两个键:readwrite。这两个键都有一个包含单个键 host 的数组值。readwrite 连接的其余数据库选项将从主 mysql 数组中合并。因此,我们只需要在 readwrite 数组中放置项目,如果我们希望覆盖主数组中的值。在这种情况下,192.168.1.1 将用作“读”连接,而 192.168.1.2 将用作“写”连接。数据库凭据、前缀、字符集和主 mysql 数组中的所有其他选项将在两个连接之间共享。

运行查询

一旦您配置了数据库连接,您可以使用 DB 类运行查询。

运行 SELECT 查询

php
$results = DB::select('select * from users where id = ?', array(1));

select 方法将始终返回一个 array 的结果。

运行 INSERT 语句

php
DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));

运行 UPDATE 语句

php
DB::update('update users set votes = 100 where name = ?', array('John'));

运行 DELETE 语句

php
DB::delete('delete from users');
lightbulb

updatedelete 语句返回受操作影响的行数。

运行一般语句

php
DB::statement('drop table users');

监听查询事件

您可以使用 DB::listen 方法监听查询事件:

php
DB::listen(function($sql, $bindings, $time)
{
	//
});

数据库事务

要在数据库事务中运行一组操作,您可以使用 transaction 方法:

php
DB::transaction(function()
{
	DB::table('users')->update(array('votes' => 1));

	DB::table('posts')->delete();
});
lightbulb

transaction 闭包中抛出的任何异常将导致事务自动回滚。

有时您可能需要自己开始一个事务:

php
DB::beginTransaction();

您可以通过 rollback 方法回滚事务:

php
DB::rollback();

最后,您可以通过 commit 方法提交事务:

php
DB::commit();

访问连接

使用多个连接时,您可以通过 DB::connection 方法访问它们:

php
$users = DB::connection('foo')->select(...);

您还可以访问原始的底层 PDO 实例:

php
$pdo = DB::connection()->getPdo();

有时您可能需要重新连接到给定的数据库:

php
DB::reconnect('foo');

如果您需要由于超出底层 PDO 实例的 max_connections 限制而断开与给定数据库的连接,请使用 disconnect 方法:

php
DB::disconnect('foo');

查询日志

默认情况下,Laravel 会在当前请求中保留所有已运行查询的内存日志。然而,在某些情况下,例如插入大量行时,这可能会导致应用程序使用过多内存。要禁用日志,您可以使用 disableQueryLog 方法:

php
DB::connection()->disableQueryLog();

要获取已执行查询的数组,您可以使用 getQueryLog 方法:

php
$queries = DB::getQueryLog();