广告
返回顶部
首页 > 资讯 > 数据库 >laravel数据库操作
  • 186
分享到

laravel数据库操作

摘要

了解 Laravel 某个模块的内部实现,最好的切入点就是从 composer.JSON 开始,从里面我们主要可以得到以下信息:require 字段可以知道相关的依赖包extra.laravel.providers 可以知道它的服务提供者的

了解 Laravel 某个模块的内部实现,最好的切入点就是从 composer.JSON 开始,
从里面我们主要可以得到以下信息:

  • require 字段可以知道相关的依赖包

  • extra.laravel.providers 可以知道它的服务提供者的类名称,这个字段配置的类
     会被laravel自动加载执行

Laravel 扩展扩展功能通常都是以 ServiceProvider 的形式注入到 Laravel 项目中的。
所以我们如果要从代码内部层面了解某个扩展包的内部逻辑,都是从 ServiceProvider 都是切入点去了解。

Laravel 数据库操作的服务提供者类为 Illuminate\Database\DatabaseServiceProvider

Laravel 数据库操作主要由以下几个部分组成:

  • Connector 数据库连接器,它负责创建具体的数据库连接

  • ConnectionFactory 连接创建器,它的主要作用就是根据配置的不同,创建对应的
    Connection

  • DatabaseManager 数据库管理器,数据操作的组织类,它就是名为 DB 的 facade

  • DatabaseTransactionsManager 数据库操作事务管理类,主要负责事务相关操作

Connectors 数据库连接器

连接器的作用是用来和数据库建立连接,其其底层依赖 PDO。目前 Laravel 支持4中类型的
数据库:

  • MysqlConnector 创建 mysqlConnection

  • PostgresConnector 创建 PostgresConnection

  • sqliteConnector 创建 SQLiteConnection

  • SqlServerConnector 创建 SqlServerConnection

以 mysql 为例介绍整个数据库连接创建的过程

  • 首先根据 database 的配置生成 PDO 创建连接需要的 dsn 字符串

  • 合并 PDO 的设置项,设置项都是以 PDO::ATTR_xxxx 开头,具体可以查看 PHP 手册

  • 创建 PDO 连接

  • 执行 use ${database} 选择数据库

  • 如果设置了 isolation_level ,会执行 SET SESSION TRANSACTION ISOLATION LEVEL 设置事务的级别

  • set names 设置连接的字符编码

  • set time_zone= 时区设置

  • set session sql_mode 设置 sql_mode

ConnectionFactory 连接创建器

ConnectionFactory 作用特别简单,就是根据  database 配置的不同的 driver 实例化上面介绍的4中数据库类型的连接器。

如果想要想要使用自定义的数据库连接器,可以在容器里面注册名为 db.connector.${driver} 创建器。

DatabaseManager

DatabaseManager 是我们操作数据的入口,负责把上面介绍的各个功能类串联起来,在操作数据库的业务逻辑中,我们都是透过 DatabaseManager 来和数据库打交道。

我们在业务逻辑中用的 DB facade 本质就是这个类。它通过魔术方法 __call,把具体的数据库的操作代理到具体的 Connection 上去执行了。

    
    public function __call($method, $parameters)
    {
        return $this->connection()->$method(...$parameters);
    }

例如我们执行 DB::select('select * from users where active = ?', [1]);
具体的过程如下

  • 创建一个默认的数据库连接

  • 调用数据库连接对象上的 query 方法。

数据库操作相关的主要功能模块基本就是以上这个,下面介绍下如何的使用

use Illuminate\Config\Repository;
use Illuminate\Database\Connectors\ConnectionFactory;
use Illuminate\Database\DatabaseManager;
use Illuminate\Foundation\Application;
// 配置
$repository = new Repository();
$repository->set('database', [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'port' => '3306',
            'database' => 'app',
            'username' => 'root',
            'passWord' => '123456',
            'unix_Socket' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => [],
        ]
    ],
]);


// 创建 Application 对象
$app = new Application();

// 数据库的配置保存到 Application 中
$app->instance('config',$repository);

// 创建数据库连接器
$connectionFactory = new ConnectionFactory($app);

// 创建数据库管理对象
$db = new DatabaseManager($app,$connectionFactory);

// 执行查询的 SQL
$list = $db->select("show databases");
您可能感兴趣的文档:

--结束END--

本文标题: laravel数据库操作

本文链接: https://www.lsjlt.com/news/7280.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作