Submitted by gouki on 2025, January 25, 12:22 AM
用 Laravel 处理大量数据时,如果不用 chunk 基本上就是卡成狗,毕竟你不可能在数万条、数十万条数据,光是请求回来都要花很长时间 ,因此,chunk 100 条或者 50 条,反而是效果更高
网上的一些例子都是建议 chunk,而不是 chunkById。但事实上你使用 chunk 的时候,也需要 orderby 一下,否则你也不清楚你的 where 条件出来的数据会是怎样的排序。而且 chunk 还有个问题就是你的每次更新其实不是实时的,当你在处理下一个 chunk 的时候,你可能还在 update 上一个 chunk 的数据。
经过测试 20000 条数据处理,order by id ,再 chunk(100),数据处理的时候会断开【即:处理到 10000 条左右的时候 就结束了,没有任何报错。】,然后再执行,就剩 5000 条左右,再执行剩 2500 左右。
测试用 chunkById,chunk(100),一次就全部处理完后,就没有丢过数据,其实看代码也能够比较明显的,其实 chunkById 才应该是我们的正常用法,因为他会获取上次取完的最后一条 ID,再处理 $count 的值。
---EOF
PHP | 评论:0
| 阅读:2572
Submitted by gouki on 2024, December 15, 11:02 AM
Filament 自带的日期组件在实际使用的时候功能还是相对比较少,因此在看到有 flatpickr 插件提供后,就想着替换了他。替换后发现功能确实达到我想要的,但带来的另一个问题是,纯英文的,语言包无法使用。即使显式的传入'local'=>'zh'也没用。
为此翻看源码,结果发现,作者在 2 年前就不维护了,直接更新 PHP 和 blade 模板发现都无效。检查他整体代码后,发现只能通过重新编译他的 filament-component 来解决
于是做了以下几步
1、将项目拷贝到 /plugins/下
2、在 composer.json 里指定路径
3、将 "coolsam/flatpickr": 的版本,改成"@dev",
4、重新 composer u
5、进入 flatpickr 的项目,pnpm i,安装 Esbuild,修改 resources/js/components/flatpickr.js,在顶部 import flatpickrLocales from 'flatpickr/dist/l10n';
然后,在 this.fp = xxx 的上一行加入:flatpickr.localize(flatpickrLocales)
这是因为 flatpickr 对就在的是 FlatPickrFn,具体的几个方法可以点击 import flatpickr from "flatpickr"; 进行查看
6、重新 node bin/build.js
虽然这时候生成了,但并不会更新到 public 里,还需要手工执行 php artisan filament:assets
至此,更新成功
然后在调用的组件里引入:customConfig(['locale'=>'zh'])即可。测试了一下 zh_tw 也没问题
PHP代码
- Flatpickr::make('created_at')->label(创建日期')
- ->customConfig([
- 'locale' => 'zh',
- ])->monthSelect(),
So easy。
---EOF---
因为比较懒,所以没有 PR 到原库,同时也没有自己根据原库弄个新库
Tags: filament, flatpickr
PHP | 评论:0
| 阅读:2839
Submitted by gouki on 2024, August 22, 5:14 PM
2024年了。phpstorm 终于支持 LOG 高亮了。
现在用 phpstorm 打开项目里的 log 文件,行号什么的时候 以及代码可以高亮显示,如果在内置终端的命令行用 tail -f 来看日志。你可以看到错误文件和行号可以点击了。点击后会跳到错误对应的行号。。
10多年了,终于有这样的功能了。这真是不可思议。在 PHP 即将或者说已经走向没落的时候 ,居然才出类似的功能。
而且这次支持的还挺多:
Log files support
Laravel, Symfony, and WordPress log files can now be viewed directly in the IDE with proper highlighting of dates, times, events (by severity level), and hyperlinks.
详细的可以查看:https://www.jetbrains.com/phpstorm/whatsnew/
还有专门亚洲语言支持:
Japanese, Korean, and Chinese UI options
Chinese, Japanese, and Korean UI language packs are now included in the base IDE installation.
PHP | 评论:0
| 阅读:4015
Submitted by gouki on 2024, August 14, 7:10 PM
如题。
本来一直是在用腾讯的,发现腾讯的更新有问题。即使是一个老的库,偶尔还有404的情况。切到aliyun后。一切正常了。
找到个页面,上面有写。腾讯是24小时更新。阿里是96秒(??96秒是什么概念。。。。。)
参考:https://cloud.tencent.com/developer/article/1606838,虽然也是普通用户发的文章,就这么一看,图一乐吧
PHP | 评论:0
| 阅读:4151
Submitted by gouki on 2024, July 3, 2:12 PM
其实有点不想写这个的,但想想还是提一嘴吧,主要是用了这玩意之后,在 phpstorm 下面,不配合 laravel idea 的话,根本起不到太大的作用。安装了 laravel idea 之后。再 generate helper code 后。就可以当成正常的方法用了(当然,即使这么用了,带来的另一个问题就是。。refactor 的时候,不会受影响,毕竟这其实就是数组的一个 key)
macroable 的适用场景,官方介绍的更多是象 str / arr /collection 的扩展。而且 macroable 有点象是 trait。给现有类注入一个方法(这点在 yii中其实早就有了。不过macroable 也属于很早的框架,只是叫法不一样罢了。 )
macroable 的 mixin 方法,估计很多人很熟悉,是的,vue2的时候 ,也是这样来注入新的方法的。
除此之外,我们可能有时候 还会在 Model / Cache 里加入自己的用法。比如标准的 Model,肯定没有 pinyin 这样的方法, 比如我要将标题转为拼音当成 slug 来用,有几种办法:
1、直接写个方法 title2pinyin( $title )
2、在 Post 类里增加一个方法 getPinyinAttribute,返回拼音(如果有多个 Model 里有类似的要求,那要么把这个方法写成 trait,要么一个个复制)
3、Post::macro('pinyin',function(){ return .... 拼音 })
类似这几种方法,不能说孰优孰劣,但如果和 model 相关的操作是被项目的人封装成 composer 的类时,也就1和3可以用了。
说实话,要想好好用这个方法,并且形成优势。有时候还真不知道或者真没感觉倒,但这毕竟也能算是曲线救国。想想,如果在 cache 里用。可以 cache()->get('name')->toPinyin(),感觉也还不错。
PHP | 评论:0
| 阅读:3943