基本用法

配置

laravel配置数据库、执行queries非常简单。配置文件在app/config/database.php里,你可以定义定义所有的数据库连接及默认地数据库连接。范例中包含了了所有支持的数据库连接。

目前之前的数据库有:MySQL/Postgres/SQLite/SQL Searver。

读/写连接

有时候我们需要在SELECT语句时选择一个数据库连接,而在INSERT,UPDATE,DELETE语句时选择其他的数据库连接,laravel可以非常简单处理,不管你用的是 原生queries,查询生成器还是Eloquent ORM。

如何配置读/写连接,看下面的例子:

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

注意我们添加了两个keys:readwrite。它们共享mysql里所有的公共配置,需要自定义的选项可以添加到readwrite对应的数组里。

执行Queries

数据库连接配置成功后,你就可以如下使用DB类来执行queries。

执行Select查询

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

select方法会返回结果集数组。

执行Insert语句

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

执行Update语句

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

执行Delete语句

DB::delete('delete from users');
  • 注意:update和delete语句会返回操作的影响行数。

执行一般语句

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

监听所有Query的事件

使用DB::listen方法:

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

事务

为执行一系列数据库事务的操作,你需要使用transaction方法:

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

    DB::table('posts')->delete();
});
  • 注意:transaction闭包里抛出的异常会使得这个事务在后台自动回滚。

若需手动启动一个事务:beginTransaction

DB::beginTransaction();

回滚:rollback

DB::rollback();

提交:commit

DB::commit();

获取数据库连接

如果你有多个连接时,可以通过DB::connection方法来获取:

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

也可以获取原生部署的pdo实例:

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

若数据库连接超过了pdo实例的max_connections限制,那么可以使用disconnect方法来断开:

DB::disconnect('foo');

Query日志

默认地,laravel会讲当前请求的执行的所有queries放在内存里。但是,当我们的插入大量的数据时,可能会占用过多的内存。那么,你可以使用disableQueryLog来禁用它:

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

若想获取执行的queries,使用getQueryLog方法:

$queries = DB::getQueryLog();