(也就是说在mysql中可以使用的函数,在其他比如oracle中有可能就不支持使用,函数是没有普通SQL语句的可移植性强.)...函数使用注意事项: 1.关于函数的关键字使用,MySQL是不区分大小写的. 2.低版本的MYSQL可能不支持高版本中部分聚集函数,具体的聚集函数的使用应根据MySQL的版本选择支持的聚集函数使用....,MySQL提供了Date函数来解决这个问题.Date(order_date)指示MySQL仅提取列的日期部分,更可靠的SELECT语句为: SELECT * FROM orders WHERE DATE...MySQL支持一系列聚集函数,可以用多种方法使用它们以返回所需的结果。...(对行进行计数时,不会忽略一行数据中每个列为null值的行) ②使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
实际上,上篇已经聊到Query Builder通过连接工厂类ConnectionFactory构造出了MySqlConnection实例(假设驱动driver是mysql),在该MySqlConnection...开发环境:Laravel5.3 + PHP7 数据库连接器 连接工厂类ConnectionFactory中通过简单工厂方法实例化了MySqlConnection,看下该connection的构造函数:...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder...总结:本文主要学习了Query Builder的数据库连接器和编译API为SQL相关源码。编译SQL细节和执行SQL的过程下篇再聊,到时见。
Builder也只是在PDO基础上封装的一层API集合,Query Builder提供的Fluent API使得不需要写一行SQL语句就能操作数据库了,使得书写的代码更加的面向对象,更加的优美。...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder
经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。默认情况下,将更新所有列。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...()); $builder->from(...)...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段
说明:本文主要学习Laravel Database模块的Query Builder源码。...实际上,Laravel通过Schema Builder来设计数据库,通过Query Builder来CURD数据库。...是核心的组件,也是类最多的文件夹 Events 装载事件类的文件夹 Migrations 实际执行migrate相关命令的类 Query Query Builder的代码主要在这个文件夹,主要的类是Builder...'db',通常会通过该manager来'向下走'到对应的数据库实现类,是重要的类 Seeder class 主要负责seed命令时的操作 数据库连接的实例化 Query Builder主要在Query...文件夹下,以一行简单又经常使用的代码为例来学习下内部实现的原理吧: Route::get('/query_builder', function() { // Query Builder
或者某个时间之后的,或者某个时间区间,那么就要再次将字符串转换成时间,两个函数 to_days,str_to_date。...(1)to_days 就像它的名字一样,它只能转换到每一天,就是说一天的时间字符串会被转换成一个数,如 mysql> select to_days('2010-11-22 14:39:51'); ...,转换之后的数增加了1,这个粒度的查询是比较粗糙的,可能不能满足我们的查询要求,那么就引入细粒度的查询方法str_to_date。...(2)str_to_date 这个函数可以把字符串时间完全的翻译过来,就很好用了。...mysql日期和字符相互转换方法 date_format(date,'%Y-%m-%d') -------------->oracle中的to_char(); str_to_date
数据库用户名为安装MySQL时配置的。.../文件夹下新建一个date+create_links_table.php文件,该文件源码主要包含两个非常重要的方法:up()/down()。...当执行数据表迁移命令php artisan migrate时执行的是up()方法;当执行回滚上一次迁移命令php artisan migrate:rollback时执行的是down()方法,该命令具有破坏性会删除...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...Out,改成Query Builder后性能高很多脚本执行很快搞定,当然各有利弊,毕竟Eloquent很强大很好用。
在 createPdoResolver() 方法中,我们看到了上面发现的那个生成回调函数的 createPdoResolverWithHosts() 方法的使用。这一下大家应该就真相大白了吧。...public function compileInsert(Builder $query, array $values) { // Essentially we will force every...public function compileSelect(Builder $query) { if ($query->unions && $query->aggregate) {...protected function compileComponents(Builder $query) { $sql = []; foreach ($this->selectComponents...当然,更复杂的东西其实还是在构造器中,毕竟在语法生成这里其实是已经到了最后的拼装阶段了。有兴趣的同学可以多深入研究一下 Builder 对象中关于上述功能的方法实现。
小伙伴想精准查找自己想看的MySQL文章?...然后经理通过调用一个DATE_FORMAT函数分组查询处理一下,就ok了,效率是我的几十倍吧。从那时起,我暗自计划要深入研究SQL技巧。 ...第二天,由于和朋友开黑打了两把王者,计划延后了几年~ 在MySQL中对于处理时间字段,有专门封装的DATE_FORMAT函数,可以说,DATE_FORMAT函数可以基本满足任何时间字段的处理需求。...DATE_FORMAT(date,format) 函数 参数解析: 1、date:代表具体时间字段,也可以为now()查询当前时间; 2、format:DATE_FORMAT将传来的Date类型数据转为自己需要的格式...22 对于上面的需求1,用DATE_FORMAT函数的查询方式如下: SELECT name as '用户名',DATE_FORMAT(createTime,'%Y-%m-%d %H') as '时间/
在Laravel中已经具有了一套高级的PHP ActiveRecord实现 — Eloquent ORM。...它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利。...Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。...在进行安装之前,确保你已经有了Web环境(Nginx/Apache + PHP7.2及以上版本 + Mysql5.6以上版本) 执行Composer命令: composer global require...laravel/installer 安装完成后, laravel new 命令会在你指定的目录创建一个全新的 Laravel 项目。
在这里还需要注意的是,链式调用每个函数方法的返回值哦,只有返回的是 Builder 对象的才可以不停地链式哈,get()、toArray()、find() 之后可不能再继续链式了,因为它们返回的是结果对象...直接通过编辑器的跳转功能点击 update() 方法就会跳转到 laravel/framework/src/Illuminate/Database/Query/Builder.php 的 update(...这个就要一步一步来看了,前面其实我们已经看到了 laravel/framework/src/Illuminate/Database/Query/Builder.php 这个对象的类文件,那么我们是怎么通过...use Illuminate\Database\Query\Builder as QueryBuilder; // laravel/framework/src/Illuminate/Database/...// laravel/framework/src/Illuminate/Database/Query/Builder.php public function from($table, $as = null
比如说我们可以使用类似于 array_map() 的函数把集合中的对象全部转换成数组,还可以用一个类似于 array_column() 的函数只获取数据中的两个字段组成键值对形式的数据。...而另外一个 map() 函数就不用多说了,之前我们说过,Laravel 的 PDO 在默认查询构造器的情况下,走的是 PDO::FETCH_OBJ ,获得的集合结果中的每个数据都是一个 stdClass...在所有模型都要继承的 laravel/framework/src/Illuminate/Database/Eloquent/Model.php 类中,我们很快就能发现一个 query() 静态方法。...而不是我们之前 查询构造器 中的 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。
Blueprint和Builder,Schema/Builder负责提供数据库操作的面向对象似的操作,而Schema/Blueprint则负责存储具体的操作数据,包括数据库操作的命令和数据库表的定义,因此有下面的结构...函数,此处我们调用的是compileCreate函数,至此我们就分析完了数据库表操作的方法,下面我们来看migrations功能。...tag v1.1.1版本的eloquent, git co v1.1.1 此版本是v4.0.0之前的一个版本,从这以后laravel会以组件的形式组织各个功能,让我们分析下v1.1.1的版本,目前具有哪些功能...:是前一篇讲的对于Active Record模式中Model的功能,包括了Model、Builder和Relation功能,忘记的可以去看前一篇orm 系列 之 Eloquent演化历程1的内容 Query...首先是morphMany的构造函数: public function __construct(Builder $query, Model $parent, $morphName) { $this
再加上,最近撸了几个腾讯云轻量服务器,所以把原来运行在学生机上面的博客搬移到新机器上了,这次无论是Mysql,php,nginx都是全手动搭建,只能说,还是不少坑需要踩一下。...前言 Laravel官方已经有scout+meilisearch 的一键扩展包 见:https://packagist.org/packages/laravel/scout 但是,肯定是不支持5.8版本的...key, [ 'offset' => $offset, 'limit' => $size, ]); } } 上面就是个帮助函数...{ Log::info('search'); return $this->ml->search($this->indexName, $builder->query, $size...Scout - Laravel - The PHP Framework For Web Artisans Laravel+Scout+Xunsearch最佳实践 - 文章|迷思爱学习乐园|兴趣是最好的老师
说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...开发环境:Laravel5.2 + MAMP + PHP7 + MySQL5.5 开发插件三件套 在先聊测试数据填充器seeder之前,先装上开发插件三件套,开发神器。先不管这能干些啥,装上再说。...Database\Query\Builder|\App\Post whereSummary($value) * @method static \Illuminate\Database\Query\Builder...具体可看下面分享的一篇文章。 最近一直在给自己充电,研究MySQL,PHPUnit,Laravel,上班并按时打卡,看博客文章,每天喝红牛。很多不会,有些之前没咋学过,哎,头疼。...分享下最近发现的一张好图和一篇极赞的文章: 文章链接:Laravel的中大型專案架構
说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...开发环境:Laravel5.1+MAMP+PHP7+MySQL5.5 先写个店铺列表页 1.先装上开发插件三件套(具体可参考:Laravel5.2之Seeder填充数据小技巧) 不管咋样,先装上开发插件三件套...\Builder|\App\Product whereCreatedAt($value) * @method static \Illuminate\Database\Query\Builder|\App...\Query\Builder|\App\Shop whereMerchantId($value) * @method static \Illuminate\Database\Query\Builder...发现:只有4个query,耗时3.58ms,效率提高很多。把原来的N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句的执行计划。
Laravel框架相当于Java的Spring,生态or文档 是很完善的。 之前写Java的mybatis各种sql的和字段的处理,试过php开发之后,确实很快啊。...php artisan key:generate 结果: 设置成功后会在根目录的.env中有显示:APP_KEY的新值 配置mysql数据库 ## 在.env文件修改数据库:账号密码 5.lavarel...数据库连接 1.database.php数据库 在当前文件中配置mysql基本配置, config/database.php 'mysql' => [ 'driver' => 'mysql',...DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=laravel-test DB_USERNAME=root DB_PASSWORD...= UserModel::query()->from('user AS u')->selectRaw('u.*'); $builderData = $builder->join('contract AS
接口调用配置 目前laravel中集成alipay SDK的支付接口很丰富。...配置config(alipay.php) 在上面中alipay的demo中是有一个config.php文件作为配置文件的,这里我们不需要这个文件,我们利用laravel的特性,在laravel项目目录下的.../vendor/laravel/lumen-framework/src/helpers.php:126) 这是因为Laravel 5使用Alipay SDK时,Laravel内带的加密解密函数Encrypt...()/Decrypt()函数和Alipay SDK中的加密解密函数Encrypt()/Decrypt()函数命名冲突 解决方法:只需修改Alipay SDK中定义的函数名称,修改引用的函数名称。...中的writeLog()函数中向该文件写入支付日志时没有写入权限,给它个权限就好了。
如下例 public function index(Request $request, Topic $topic) { $query = $topic->query();...没必要的数据增加了数据库操作,增加了数据响应。 正确的做法应该是,服务端返回基础数据,在根据客户端传参返回其相关联的数据 如何实现?...通过laravel第三方扩展包 spatie/laravel-query-builder 官方文档:https://docs.spatie.be/laravel-query-builder/v2/introduction.../ 1.composer 引入 composer require spatie/laravel-query-builder 2.控制器使用 use Spatie\QueryBuilder\QueryBuilder...我们还可以键入某个scope(查询作用域)对数据进一步过滤,本文使用了定义好的withOrder作用域 //调用排序函数 public function scopewithOrder($query