首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel 5.3之 Query Builder 源码解析(中)

Connection::select()执行的,之前的Laravel版本是没有封装在闭包里而是先执行了连接操作,Laravel5.3是封装在了闭包里等着执行SQL语句再连接操作,应该是为了提高效率。...{ // 使用extract()函数来读取一个关联数组,如['host' => '127.0.0.1', 'database' => 'homestead'] /...createConnection($dsn, $config, $options),该方法实例化了一个PDO,这里就明白了Query Builder也只是在PDO基础上封装的一层API集合,Query...Connection::select()执行的,之前的Laravel版本是没有封装在闭包里而是先执行了连接操作,Laravel5.3是封装在了闭包里等着执行SQL语句再连接操作,应该是为了提高效率。...createConnection($dsn, $config, $options),该方法实例化了一个PDO,这里就明白了Query Builder也只是在PDO基础上封装的一层API集合,Query

3.5K31

Laravel 5.3之 Query Builder 源码解析(中)

实际上,上篇已经聊到Query Builder通过连接工厂类ConnectionFactory构造出了MySqlConnection实例(假设驱动driver是mysql),在该MySqlConnection...开发环境:Laravel5.3 + PHP7 数据库连接器 连接工厂类ConnectionFactory中通过简单工厂方法实例化了MySqlConnection,看下该connection的构造函数:...Connection::select()执行的,之前的Laravel版本是没有封装在闭包里而是先执行了连接操作,Laravel5.3是封装在了闭包里等着执行SQL语句再连接操作,应该是为了提高效率。...{ // 使用extract()函数来读取一个关联数组,如['host' => '127.0.0.1', 'database' => 'homestead'] /.../ 则 $host = '127.0.0.1', $database = 'homestead', 很巧妙的一个函数 extract($config, EXTR_SKIP);

3.3K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Laravel 数据库连接配置和读写分离

    今天开始讲如何在 Laravel 中操作数据库,Laravel 为我们提供了多种工具实现对数据库的增删改查,在我们使用 Laravel 提供的这些数据库工具之前,首先要连接到数据库。...', 'mysql'), 当然,默认数据库连接、数据库名称以及数据库用户名和密码等敏感信息都保存到 .env 文件中了,然后通过 env 辅助函数读取: DB_CONNECTION=mysql DB_HOST..., ], 然后在 .env 中新增对应配置项: DB_CONNECTION_OLD=mysql DB_HOST_OLD=mysql DB_PORT_OLD=3306 DB_DATABASE_OLD=laravel56...connection 属性: protected $connection = 'mysql_old'; 这样,在模型类上执行查询、插入等操作时都会使用这个 mysql_old 数据库连接。...->get(); DB::connection('write')->table('users')->insert(...); 如果通过 Eloquent 模型类调用的话,还可以这么指定: User::

    5.5K20

    Windows 如何安装Homestead

    官网 下载完成之后,双击安装包进行安装,默认下一步就可以,当然你也可以更换系统盘符 安装 Vagrant Vagrant 官网 同样傻瓜式直接下一步即可 ==以上两个软件安装 Windows可能弹出需要管理员运行等操作...最好将各种杀毒软件关掉)== 安装Git Windows 上有一个图形化界面可以下载安装 Git客户端 安装好他你只需要使用他的命令行操作即可,不要使用他的图形化界面,难用的要死 另外 Windows 上推荐一款软件...://github.com/laravel/homestead.git Homestead 接着 cd Homestead git checkout v6.1.0 init.bat 基于以上 Hmoestead...就安装成功了,接下来进行配置 配置 Homestead.yaml 文件 在配置之前,我们先在任意磁盘 新建一个文件夹 Code,用来存放我们的 PHP代码,比如 laravel等 cd D:\php...Homestead 可以同时为多个 Laravel 应用提供虚拟化环境: sites: - map: laravel-blog.test to: /home/vagrant/Code

    2.3K20

    Laravel 4 小技巧两则

    // 该函数的签名: public function controller($uri, $controller, $names = array()) // 不命名一般使用: Route::controller...根据系统变量判断当前运行环境 系统默认的判断是否本地环境的方法是根据在 'local' 数组中指定一组作为本地环境的主机名,比如在办公机、Macbook上都要做开发,你就要把两个主机名都写进去,我觉得这样很麻烦...改成了根据 $_SERVER['LARAVEL_ENV'] 来判断,这样我可以在所有开发机中都定义 'LARAVEL_ENV' 的环境变量,值为 'local',于是在开发机就会自动识别为 'local...getenv('LARAVEL_ENV') : array( 'local' => array('homestead') ); return $_env; }); // 这实际是去读取...$_SERVER['LARAVEL_ENV'] 的值 // 在 Apache 中,可以用 SetEnv 设置, // 在 Nginx 中,可以用 fastcgi_param 设置

    1.1K50

    mac开发php集成环境「建议收藏」

    我是一个使用 mac 开发的 phper ,虽然使用 mac 开发也就不到一年,但是 mac 上的一些技巧还是掌握的不错的,但实际开发中光有操作技巧是不行的,环境的效率也是很重要的,因为之前一直使用 homestead...虚拟机,刚开始还没感觉它有多慢,但是后来感觉 homestead 真是太慢了,当然这可能也跟电脑的性能有关,我经常启动好几个虚拟机,在上面跑 windows 系统。...但无论如何,它的速度太慢了,请求时间、打开速度起码都在 3s 以上,虽然它可以使本地的开发环境和线上一致,以免在开发中因为服务器环境导致报错,但是还是不得不打算放弃它,因此在我想在mac上直接搭建开发环境...,开始了解到 valet ,不得不说,valet 的确是一个轻量级的 laravel 本地开发环境,为什么说 laravel 呢,因为它基本上是为 laravel 定制的开发环境,虽然也支持 cakephp...,我了解的有 MAMP 、XAMPP 这两个,MAMP 是收费的,也有免费版的,免费版的我也用过,但是整个界面看上去很乱,一个不会英语的开发使用起来比较困难,果断卸载,然后安装 XAMPP ,但是安装之后发现功能又太少

    5.1K10

    Laravel源码解析之ENV配置

    Laravel在启动时会加载项目中的 .env文件。对于应用程序运行的环境来说,不同的环境有不同的配置通常是很有用的。...自定义env文件的路径与文件名 env文件默认放在项目的根目录中, laravel 为用户提供了自定义 ENV 文件路径或文件名的函数, 例如,若想要自定义 env 路径,可以在 bootstrap 文件夹中...file函数将配置从文件中一行行地读取到数组中去,然后排除以 #开头的注释,针对内容中包含 =的行去调用 setEnvironmentVariable方法去把文件行中的环境变量配置到项目中去: namespace...- "DB_PORT=3306" - "DB_HOST=database" 这样在容器里设置好环境变量后,即使 env文件里的 DB_HOST为 homestead用 env函数读取出来的也还是容器里之前设置的...在项目中读取env配置 在Laravel应用程序中可以使用 env()函数去读取环境变量的值,比如获取数据库的HOST: env('DB_HOST`, 'localhost'); 传递给 env 函数的第二个值是

    2.1K20

    基于 Redis 在 Laravel 中实现消息队列及底层源码探究

    在 PHP 中,可以使用原生的数组函数或者 SplQueue 类很轻松地实现队列这种数据结构,不过这里我们介绍的是 Redis,所以还可以借助 Redis 自带的列表类型来实现。...要在 Laravel 项目中使用 Redis 实现队列系统,只需在配置好 Redis 连接信息后将环境配置文件 .env 中的 QUEUE_CONNECTION 配置值调整为 redis 即可: QUEUE_CONNECTION..., 'block_for' => null, ], 队列系统服务提供者 在 Laravel 应用启动时,会通过 QueueServiceProvider 来注册队列系统相关服务到服务容器: public...RedisJob 上定义的 fire 方法执行对应的任务逻辑(更底层调用的是 Redis 封装任务类上的处理方法): public function process($connectionName,...handle 或者 __invoke 方法执行,这里也就是我们在 PostViewsIncrement 上定义的 handle 方法: public function dispatchNow($command

    6.4K30

    Laravel源码解析之Database

    在我们学习和使用一个开发框架时,无论使用什么框架,如何连接数据库、对数据库进行增删改查都是学习的重点,在Laravel中我们可以通过两种方式与数据库进行交互: DB, DB是与PHP底层的 PDO直接进行交互的...上面说的这两个部分都包括在了 Illuminate/Database包里面,除了作为Laravel的数据库层 Illuminate/Database还是一个PHP数据库工具集, 在任何项目里你都可以通过...explode('::', $name, 2) : [$name, null]; } public function getDefaultConnection() { // laravel默认是...如果设置了读写分离,那么就会调用 createReadWriteConnection 函数,生成具有读、写两个功能的 connection;否则的话,就会调用 createSingleConnection...函数,生成普通的连接对象。

    1.3K30

    【Laravel系列4.5】主从库配置和语法生成

    ('mysql2')->table('db_test')->get()->toArray()); }); 在执行第一个路由之后,dd() 打印的数据中我们会看到新添加成功的数据。...在 createPdoResolver() 方法中,我们看到了上面发现的那个生成回调函数的 createPdoResolverWithHosts() 方法的使用。这一下大家应该就真相大白了吧。...在 Builder 中,get() 方法会调用一个 runSelect() 方法,这个方法里面会再调用一个 toSql() 方法,就是获得原始查询语句的方法。...这一个循环是在干嘛?其实,从代码中我们可以看,它在遍历一个本地属性 selectComponents ,并根据这个属性里面的内容去调用自身的这些方法。...总结 今天的内容其实相对来说轻松一些,毕竟关于 Laravel 数据库方面的内容重点在于之前学习过的 模型 和 查询构造器 上。

    4.3K20
    领券