laravel5.1 数据库相关,操作底层实现
2015-12-31 20:26
831 查看
一、数据库配置
数据据库相关配置文件都在
目前 Laravel 支持四种数据库系统: MySQL、Postgres、SQLite、以及 SQL Server。
二、基本语句
执行 Select语法
执行 Insert 语法
执行 Update 语法
执行Delete 语法
执行一般语法
监听查找事件
});
三、数据库事务处理
1、laravel封装的transaction方法
DB::transaction(function()
{
DB::table('posts')->delete();
});
注意:transaction闭包仅针对抛出任何异常会导致事务自动回滚,其他错误并不会导致事务回滚,故请谨慎使用
2、自己开启事务
开启事务
回滚
提交
四、底层实现代码分析
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连接
数据据库相关配置文件都在
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连接
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- workerman结合laravel开发在线聊天应用的示例代码
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- 简单对比分析Ruby on Rails 和 Laravel
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询