laravel笔记-数据库(配置与基础)

来源:互联网 发布:电脑数据怎么恢复 编辑:程序博客网 时间:2024/06/14 11:20

laravel笔记-数据库(配置与基础)

写在前面

时间可贵,善用目录↑

学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。


写在前面

关于MySQL的配置方法参见另一篇博客: laravel5 数据库配置(MySQL)


基本参数

支持的数据库:
-MySQL
-Postgres
-SQLite
-SQL Server

配置文件位置:config/database.php


基本配置操作:

SQLite:

DB_CONNECTION=sqliteDB_DATABASE=/absolute/path/to/database.sqlite

SQL Server:

'sqlsrv' => [    'driver' => 'sqlsrv',    'host' => env('DB_HOST', 'localhost'),    'database' => env('DB_DATABASE', 'forge'),    'username' => env('DB_USERNAME', 'forge'),    'password' => env('DB_PASSWORD', ''),    'charset' => 'utf8',    'prefix' => '',],

使用原生SQL查询

通过DB门面可以运行原生SQL语句,DB门面提供了select, update, insert, delete和statement方法。

简单的例子

查询:

//原生SQL,第一个是SQL语句,第二个是插入的数据$users = DB::select('select * from users where active = ?', [1]);

返回:以数组的形式返回结果集,数组中的每一个结果都是一个PHP StdClass对象

foreach ($users as $user) {    echo $user->name;}

扩展

绑定数据:

除了使用?占位符来代表参数绑定外,还可以使用命名绑定来执行查询:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

insert:

返回插入行数。

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

update:

返回更新行数。

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

delete:

返回删除行数。

$deleted = DB::delete('delete from users');

骚操作

读写分离

使用一个数据库连接做查询,另一个数据库连接做插入、更新和删除。

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

多个数据库连接

使用DB门面上的connection方法访问每个连接。

$users = DB::connection('database.php中定义的链接')->select(...);

如果想获得原生PDO可以如下:

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

监听SQL

DB门面的listen方法可以监听sql操作,我们可以在服务提供者中注册:

例如在之前例子中用到的:AppServiceProvider

namespace App\Providers;use Illuminate\Support\Facades\DB;use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{    /**     * Bootstrap any application services.     *     * @return void     */    public function boot()    {        //看这里~~        DB::listen(function ($query) {            // $query->sql            // $query->bindings            // $query->time        });    }    /**     * Register the service provider.     *     * @return void     */    public function register()    {        //    }}

数据库事务

就是BEGIN,ROBACK,COMMIT之类的

第一种方法:
使用DB门面的transaction方法,会自动提交或者回滚,不需要额外操作。

DB::transaction(function () {    DB::table('users')->update(['votes' => 1]);    DB::table('posts')->delete();});

第二种方法:

手动开始事务,也是使用DB门面。

//开始DB::beginTransaction();//回滚DB::rollBack();//提交DB::commit();
原创粉丝点击