Laravel chunk 使用注意的问题

使用 Laravel 的 chunk 可以用来优化大结果集的查询,提供分块处理数据的方法,但是如下的例子就会有问题:

原因在于第一次查询:

select * from users where approved = 0 limit 100 offset 0;

继续阅读“Laravel chunk 使用注意的问题”

在 Laravel 中使用 gulp 构建前端资源

最近把自己主页前端代码进一步规范了,使用 npm 引入一些前端的资源库,在 Laravel 5.5 中使用 gulp 遇到一些坑。

mix.sass 无法直接使用 node_modules 文件夹里的,只能用 resource/assets/sass/app.scss 这个文件生成 css,然后和其他的 css 合并为一个文件。

mix.scripts 可以使用 node_modules 文件夹里的 js,并和自己的 js 合并为一个文件。
继续阅读“在 Laravel 中使用 gulp 构建前端资源”

Laravel 模型间关系设置分表方法

在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法:

继续阅读“Laravel 模型间关系设置分表方法”

Laravel 依赖注入源码解析

在 Laravel 的控制器的构造方法或者成员方法,都可以通过类型约束的方式使用依赖注入,如:

这里 $request 参数就使用了类型约束,Request 是一个类:\Illuminate\Http\Request,表示参数必须是这个类或子类。

本文通过分析 Laravel 的源码,看为什么方法中不需要传入实例就可以直接使用 Request 呢?只是框架自动帮我们实例化并传参了。

继续阅读“Laravel 依赖注入源码解析”

为什么 Laravel 会重复执行同一个队列任务?

在 Laravel 中使用 Redis 处理队列任务,框架提供的功能非常强大,但是最近遇到一个问题,就是发现一个任务被多次执行,这是为什么呢?

先说原因:因为在 Laravel 中如果一个队列(任务)执行时间大于 60 秒,就会被认为执行失败并重新加入队列中,这样就会导致重复执行同一个任务。

继续阅读“为什么 Laravel 会重复执行同一个队列任务?”

Laravel Redis 多个进程同时取队列问题

开启多个进程处理队列会重复读取 Redis 中队列吗?是否因此导致重复执行任务?

使用 Supervisor 监听 Laravel 队列任务,其中 Supervisor 的配置如下:

注意 numprocs = 8,代表开启 8 个进程来执行 command 中的命令。

继续阅读“Laravel Redis 多个进程同时取队列问题”

使用 Laravel 消息队列要注意的问题

使用 Laravel 的消息队列处理异步任务,Redis 作为队列数据库,Supervisor 监控脚本异常中断并自动重启,这是 Laravel 处理队列任务的标准流程,但是实际中可能还会出现各种各样的问题,为了保证系统可靠性,还要注意几个问题。

一、执行失败重试次数设置

一定要设置任务执行失败重试次数,避免无限失败重试,超过重试次数 Laravel 会默认写到失败任务表中,也可以自己写执行失败后续处理逻辑。

继续阅读“使用 Laravel 消息队列要注意的问题”