您的位置:首页 > 编程语言 > PHP开发

laravel5.1 数据库相关,操作底层实现

2015-12-31 20:26 831 查看
一、数据库配置
        数据据库相关配置文件都在
config/database.php

        目前 Laravel 支持四种数据库系统: MySQL、Postgres、SQLite、以及 SQL Server。
二、基本语句 
     

use DB;


执行 Select语法

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


执行 Insert 语法

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


执行 Update 语法

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


执行Delete 语法

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


执行一般语法

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


监听查找事件

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

    //

});

三、数据库事务处理

1、laravel封装的transaction方法

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

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

注意:transaction闭包仅针对抛出任何异常会导致事务自动回滚,其他错误并不会导致事务回滚,故请谨慎使用

2、自己开启事务

开启事务

DB::beginTransaction();


回滚

DB::rollback();


提交

DB::commit();


四、底层实现代码分析
       
DB::select()为例

     DB::select('select * from articles where id= ( ? )',[1])
     ==> use DB 
     ==>
config/app.php 里别名 aliases 'DB' => Illuminate\Support\Facades\DB::class,
      ==> DB类 getFacadeAccessor() return 'db'
     ==> Facade类  __callStatic($method, $args)
      ==> Facade类 getFacadeRoot()中getFacadeInstance()获得DB类getFacadeAccessor()
return的‘db'
     ==> Facade类 getFacadeInstance()
接收参数 'db' 经由$app(application类)中bingdings中
           'db应DatabaseManager()类 return DatabaseManager()类
         ==> Facade类 getFacadeRoot()
return DatabaseManager()类
         ==> Facade类 __callStatic($method, $args)中
           $instance为DatabaseManager()类,
           $method为 select
           $args = array(
              'select * from articles where id= ( ? )',
              array(1),
           )
      ==> Facade类 __callStatic($method, $args)中
 case 2
          return $instance->$method($args[0],$args[1])
      ==> DatabaseManager()类 __call($method, $parameters) 回调方法
                  $method 为 select         $parameters 为 array(1)
     
==>  call_user_func_array([$this->connection(), $method], $parameters)
            $this->connection() ==> makeConnection() ==> ConnectionFactory类make()
            ==>createSingleConnection($config),在配置文件的基础上建立PDO连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息