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

Laravel代码简洁之道和性能优化

思考:如何提高Model层查询DB的效率?如何精简代码?...经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...这可以是单个记录或多个记录。 第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段

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

    Lumen 实现 SQL 监听

    首发于:我的博客 之前 Lumen 框架从 5.6 升级到 5.7。发现 laravel-sql-logger 包不能正常纪录日志了。...Lumen有一些自己的调试SQL的方法,但是这些并不是我们想要的。所以我们只能自己写监听事件。 具体的解决方案是,我们首先创建一个Listener文件。...("id", 1)->first(); // 在控制器执行查询方法 } } 注册路由 // file: routes/web.php $router->get('/one', "UserController...那么我们来尝试运行一下: QueryExecuted {#65 ▼ +sql: "select * from `users` where `id` = ?...其实 laravel-sql-logger还有一些高级的显示功能。比如说打印日志的时候会顺带着打印请求URL。打印请求时间等。这些我就不这里具体完善了。如果大家有兴趣,可以自己想办法实现。很简单的。

    2.9K10

    Laravel Eloquent 模型关联关系(下)

    基于关联查询过滤模型实例 有结果过滤 有的时候,可能需要根据关联查询的结果来过滤查询结果,比如我们想要获取所有发布过文章的用户,可以这么做: $users = User::has('posts')->get...= User::has('posts', '>', 1)->get(); 底层执行的 SQL 查询语句如下: select * from `users` where ( select...whereHas/orWhereHas 方法基于闭包函数定义查询条件,比如我们想要过滤发布文章标题中包含「Laravel学院」的所有用户: $users = User::whereHas('posts...', function ($query) { $query->where('title', 'like', 'Laravel学院%'); })->get(); 底层执行的 SQL 查询语句如下...('content', 'like', 'Laravel学院%'); })->get(); 无结果过滤 与 has/orHas 方法相对的,还有一对 doesntHave/orDoesntHave 方法

    19.6K30

    为什么 Laravel 会成为最成功的 PHP 框架?

    在近几年对PHP框架流行度的统计中,Laravel始终遥遥领先。那么是什么让Laravel成为最成功的PHP框架?...Laravel以其简洁、优雅的特性赢得了大家的广泛关注,无论是专家还是新手,在开发PHP项目的时候,都会第一时间的想到Laravel。本文我们将讨论为什么Laravel会成为最成功的PHP框架。...微服务和程序接口 Lumen是一个由laravel衍生的专注于精简的微框架。它高性能的程序接口可让你更加简单快速的开发微型项目。...Lumen使用最小的配置集成了所有laravel的重要特性,你可以通过将代码复制到laravel项目的方式将完整的框架迁移过来。 where('votes', '>', 100)->take(10)->get(); foreach ($users as $user) { var_dump($user

    3.8K90

    lumen安装Horizon

    但是我们使用的是lumen,官方的Horizon并不支持lumen。所以又去找第三方,结果发现已经八个月没有更新了。无奈尝试自己维护。发现一堆坑。根本填不完。今天早上想着去packagist去淘淘。...还真让我发现了一个正在维护的: horizon-lumen。 一切安装就按照README.md上面的步骤进行安装就好了。 再此说下,中间碰到的坑。...在执行如下命令: php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider" 出现如下错误: In Facade.php...line 218: A facade root has not been set....经过查询发现解决方案是在boorstrap/app.php中的注释: $app->withFacades(); // 去掉这一行的注释 我发现这一行已经开启了,但是还是出现这个错误。

    1.8K40

    laravel 5.6日志理解及日志格式定义「建议收藏」

    Laravel/Lumen的日志简单系统介绍: Laravel/Lumen的日志默认是基于Monolog进行了一层封装,如果要求不高,用起来还是十分容易的,本文基于laravel5.6/Lumen5.6...---- 基本配置(解决日志路径文件名和保存周期等) 开始使用Laravel5.5时经常遇到有人问Laravel中日志的为什么只有一个文件,能不能修改日志目录,能不能修改日志文件名?...], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log...], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log...几经折腾,发现 Monolog 有很多可以用的 Formatter ,但发现官方的把字段写死在里边了,抓狂到了想直接改官方源码的龌龊地步了,还是不死心,最终发现Laravel5.6的logging参数中有一个

    71630

    Lumen框架多数据库连接配置方法

    Lumen作为一款API导向很浓的框架,配置极简化,默认只支持一路DB配置 然而随着业务复杂度的提高,引入多个数据库连接似乎无法避免,下面介绍一下LUMEN连接多个数据库的配置方法: 修改.env文件,...DB_TEST_DATABASE=dbname2 DB_TEST_USERNAME=dbname2 DB_TEST_PASSWORD=password DB_TEST_TIMEOUT=4 因为LUMEN...在加载DB配置时,还是会默认去laravel模块下寻找相关配置文件,这时修改laravel模块下的database.php文件 文件位置在: ..../vendor/laravel/lumen-framework/config/database.php 添加.env文件中新增的DB配置,如下: //默认配置 'mysql' => [...00:00'), 'strict' => env('DB_STRICT_MODE', false), ], 在项目中调用时,直接按database.php中的做法初始化

    1.3K10

    当我们讨论swoole的时候,我们在讨论什么?

    这个swoole底层的实现决定的,官方建议可以利用多进程,比如异步任务。 应用方式 扩展:laravel+swoole,laravel-s。两个框架对数据库的IO不支持协程并发。...Laravel/Lumen中存在很多单例、静态属性,不同请求间的数据会相互影响,这是不安全 的。...比如数据库连接就是单例,同一个数据库连接共享同一个PDO资源,这在同步阻 塞模式下是没问题的,但在异步协程下是不行的,每次查询需要创建不同的连接,维护 不同的IO状态,这就需要用到连接池。...相同点:go与swoole的channel功能上大体类似于一个队列,主要用来保证多个协程之间的通讯,「用通信来共享内存,而不是通过共享内存来通信」。..., "jinzhu")` 是调用的第一个方法,它会创建一个新 `Statement` db.Where("name = ?", "jinzhu2").Where("age = ?"

    5.9K40

    lumen搭建php微服务

    在互联网高速发展的今天,如果你不知道微服务,那么很多公司你是进不去的,并且如果你不懂微服务,那么你在处理复杂业务的时候将会变得异常头疼。那么什么是微服务,php中的微服务是如何处理的。...其中的微表示各个服务提供的功能单一微小,不像普通服务那样的巨大服务。 它们是最小的,集中的服务,仅处理部分后端逻辑。与写入新数据相比,我们读取现有数据的倾向要大得多。...Lumen 它是一个精简的laravel框架,舍弃了laravel中许多繁重的功能,它可以高效率地对外提供api方法。...Lumen包含的特性 缓存 Command Scheduler 控制器 Eloquent ORM 错误处理 数据库抽象 依赖注入 日志 队列任务 总结 其实简单来讲,微服务就是一个个api接口,只不过这些...api接口不是由一个整体服务来提供,它是由一个个模块来提供,我们可以通过lumen来开发部署多个模块,每个模块单独部署,这就是我们所说的微服务。

    53510

    牛哇,PHP这个开发框架真的好香!

    Laravel框架相当于Java的Spring,生态or文档 是很完善的。 之前写Java的mybatis各种sql的和字段的处理,试过php开发之后,确实很快啊。...这个语法是并且 (and) 关系语法这个语法是或者 (or) 关系语法 采取model进行sql增删改查(常用) 9.4 查询 laravel中对数据库开发模型非常重要。...::query()->where($where)->first(); dd($list->toArray()); } 打开postman查询,进行dd调试 响应 { "code": 0...更高级的用法,更多内容建议看官方文档:https://learnku.com/docs/laravel/7.x/eloquent/7499 总结 laravel框架采取链式查询sql。...更多的sql链式编写查询官方文档,应该是很快可以上手的。 之后还有比laravel更高级的用法lumen框架,就类似Java的mybatis-plus与mybatis。

    26920

    LaravelLumen 使用 redis队列

    lumen没有配置文件,可以从laravel项目中拷贝一份config目录过来。... 接口, 告诉 Laravel 将该任务推送到队列,而不是立即运行: lumen中 app/Jobs目录已经存在,由于不能执行artisan命令,直接复制目录中的ExampleJob.php即可。...dispatch 方法需要的唯一参数就是该任务的实例: lumen中用法: 4、指定最大失败次数 指定队列任务最大失败次数的一种实现方式是通过 Artisan 命令 --tries 切换: php...配置 Supervisor Supervisor 配置文件通常存放在 /etc/supervisor/conf.d 目录,在该目录下,可以创建多个配置文件指示 Supervisor 如何监视进程,例如,...让我们创建一个开启并监视 queue:work 进程的 laravel-worker.conf 文件: [program:laravel-worker] process_name=%(program_name

    2.4K20

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

    数据库的连接配置文件位于 config/database.php,和很多其他 Laravel 配置一样,你可以为数据库配置多个「连接」,然后决定将哪个「连接」作为默认连接。...默认情况下,我们在通过 Laravel 提供的数据库工具(DB 门面、查询构建器、Eloquent模型)连接数据库的时候,都没有显式指定连接,因为我们在配置文件中指定了默认的连接 mysql。...配置数据库读写分离连接 理论上来说,配置数据库读写分离连接也属于配置多个数据库连接的范畴,但是由于是一个比较特殊又很常见的使用场景,所以我们单独来讨论,Laravel 也对此进行了单独支持。...针对读写分离数据库的连接,Laravel 数据库底层会自动判断,如果是查询语句会使用读连接,如果是数据库插入、更新、删除等操作会使用写连接。...当然,和多个数据库连接类似,你也可以在使用时显式进行指定,以查询构建器为例: DB::connection('read')->table('users')->where(...)

    5.5K20

    Nginx+PHP(laravel) 环境 499 错误码排查过程小记

    在nginx源码中,499对应的定义是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。...经过仔细检查,发现几个严重问题: 查出某表「全部结果」,再「遍历」结果集,查询每条记录「多个字段」的关联模型 未执行 php artisan optimize 未关闭 debug 模式 未调整 log_level...由此,若是采用类似: posts = posts::where('user_id', 1); foreach(posts as post){ likes = post->likes; comments...= post->comments; } 在 Laravel 框架内使用类似如上的方式查询,假设作者的文章数为 n,每篇文章关联的模型有 2 个(likes & comments),则执行此控制器,对于数据库的时间复杂度为...于是修改代码,过程不再详叙,参见 Laravel 官方文档,或: Laravel 学习笔记之模型关联预加载 经过修改,在 Chrome 开发者工具内查看请求 Timing,缩短为原来时间的一半,800ms

    1.3K20

    Laravel 7发行说明

    对于一般的发行版本,只提供了 6 个月的错误修复和 1 年的安全修复。对于包括 Lumen 在内的所有其他版本,只有最新版本才会修复错误。此外,请查阅 Laravel 支持的 数据库版本。...Laravel Sanctum 为 SPA (单页应用程序),移动应用程序和基于令牌的简单 API 提供了轻巧的身份验证系统。 Sanctum 允许应用程序的每个用户生成多个 API 令牌。...7 将自动确定查询范围,以使用约定猜测其父级上的关系名称,以其父级检索嵌套模型。...Laravel 7 允许为单个应用配置多个邮件驱动。在 mail 配置文件中的每个邮件驱动都拥有它们自己的配置以及自己独特的 「transport」,这允许你的应用使用不同的邮件服务来发送某些邮件。...有关 Laravel 7.x 中的 CORS 支持的更多信息,请查阅CORS文档。 查询时类型转换 查询时类型转换由 Matt Barlow 开发贡献.

    9K20

    laravel中DB_TIIMEZONE中的坑

    数据库:RDS(阿里云)-5.6 PHP:PHP7.2 + Lumen 系统:Ubuntu $time = date('Ymd'); $pdo = new PDO("dns", "user", "password...time}'"); foreach($data as $item) { var_dump($data); } 我们有一条上面的查询语句。...并没有追查这个事情的具体原因。 正好白天有一点空闲,所以准备排查一下这个问题。 我的第一考虑就是时区的问题,但是我自己执行以下的查询语句,却是发现没有问题。...password"); $data = $pdo->queru("select now()"); foreach($data as $item) { var_dump($data); } 所以我把目标转向了lumen...我们上班的时间是白天十点以后,这样当天的时间减去八个小时候再去计算,最上面写的SQL中的where条件还是成立的,但是凌晨一点去计算的时候,却是查询的昨天的数据,所以where条件就不查询不到正确的数据了

    1.1K10
    领券