手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

数据恢复时丢失索引。

 为了快速恢复数据,选择了没有外键之类的。结果导致所有的主键丢失、外键丢失(外键是我自己选择不要的,因为写 PHP 的代码的早期,全是靠程序来处理外键。很少用 foreign-key 的)。

但主键没有确实有点意外,不过还好。数据表不多,加起来就行了
 
---
等会去看一下 DDL 相关,是不是我在复制和恢复的时候没有主动打勾。但数据已经加了两条我就先不管其他的了(只是做一下操作看看原因。)
 
----
 
确实是操作失误,在迁移数据的时候选择了 data only,忽略了数据库结构。所以要这样做
1、先复制 DDL,创建完表
2、再 COPY 数据,DATA ONLY。这样就 OK 了
3、

数据又丢了一次

这次的丢数据确实挺意外。

我是在执行 migrate 的时候。他居然直接清空了所有的表。所以这个还是要慎重(原来的项目是 sablog ,新项目用 laravel 来管理的时候,因为没有 migration 文件,他居然先 truncate table 了),这个很纠结。
 
还好,我用的是腾讯云的轻量云。他可以按时间点恢复备份。还好我最后一篇是 13 号的,所以我恢复到了 14 号的数据。基本上算丢失一天的内容(其实也只有评论了)。
后续对这些数据我还是要考虑一下如何备份,因为平时默认我没有备份数据库的习惯。
 
顺便说一下,轻量数据库还是挺合算的费用不高,还有这么多功能,比直接自己本地装一个 mysql 合适多了。
 

Laravel 的 chunk 和 chunkId 丢数据的问题

 用 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

优化 Filament 的 flatpickr 插件

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代码
  1. Flatpickr::make('created_at')->label(创建日期') 
  2.     ->customConfig([ 
  3.          'locale' => 'zh',  
  4.     ])->monthSelect(),  
So easy。
 
 
---EOF---
因为比较懒,所以没有 PR 到原库,同时也没有自己根据原库弄个新库
 
 
 

Tags: filament, flatpickr

2024年,phpstorm 终于支持 log 高亮了

 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.

 
 
 
 
 
Records:64712345678910»