分类下相关文章
2020-11-20 · 阅读 14246 · 字数 1109
Laravel 令人头疼的性能问题 昨天上午,同事在测试一个知识 PK 的小程序,在 2~3 同时在线的情况下,服务器 CPU 居然达到了 60%,触发了阿里云钉钉报警。。。 一个非常简单的 API 接口,虽然写的逻辑确实比较啰嗦,但是一秒钟不超过 5 个请求的情况下,Laravel 硬是把 CPU 彪到了 60%。 这个性能确实让人无法接受,简直是玩具,根本不满足上线的基本要求。 确认是接口逻辑问题还是 Laravel 的问题 为了确认是接口的逻辑问题,还是 Laravel 的问题。我们做了一些简单的对比测试。 测试的对象是两个不同的 Laravel 项目下的相同功能的 API,例如,这里测 ...
2018-12-25 · 阅读 5983
在用 Laravel Backpack 写一个定制化的 CRUD 页面。例如,一个指定店铺所拥有的商品的 CRUD 页面。 起初路由我是这样写的 CRUD::resource('products-of-store/{store_id}', 'ProductCrudController'); 报错 Route pattern "/products-of-store/{store_id}/{{store_id}}" cannot reference variable name "store_id" more than once. 解决方法,Route ...
2018-12-27 · 阅读 12927
之前记录过 Laravel Form 表单的数据校验, 但是大部分时间我是在写 API 给前端调用。 如果能够使用 Laravel 的 Validator 来进行 API 的数据校验,将节省我大量的时间。 测试了一下,确实可以,而且非常方便使用。 以下为我创建的一个 API Validator 的 VIM Code Snippet $rsp = ['err_code' => 0, 'err_msg' => 'OK',]; $input = $request->all(); $rules = [ 'name' => 'required', 'person_tel' ...
2018-12-19 · 阅读 5354
最佳方式 $total = Book::count() - 1; $skip = mt_rand(0, $total); $item = Book::select('name', 'author_id')->skip($skip)->take(1)->first(); 耗内存的方式 Book::inRandomOrder()->get(); 等同于 Book::orderByRaw("RAND()")->get(); 耗内存的原因是,随机序需要建立临时表。 更加耗内存的 Collection 方案 Book::all()->rand ...
2019-06-22 · 阅读 17979 · 字数 240
返回指定字段 Book::select("price", "name")->all(); 返回关系字段关联的属性 Book::select("price", "name", "author_id")->with('author')->all(); 注意,如果要返回关系字段的信息,一定要将对应的 id 字段加入到 select 中。否则关系字段会显示为 null. 返回关系字段关联的指定属性 Book::select("price", "name ...
2018-12-14 · 阅读 12481
是否需要使用 password 理论上,登陆使用手机号及验证码已经足够,唯一的问题是,发送短信的成本。看上去,加上个登陆密码会更好,能省去不少成本。 但是,仔细想想,如果你的商城平台的流量大部分来自于渠道方,用户主动回头访问的概率很低,那就完全没有必要设置密码。设置了密码还会带来弊端 不常登陆的网站,理论上一段时间不用,密码就会忘掉,最后还得短信找回密码 设置密码的过程,增加了干扰用户购买的时间,不利于转化 如果省去了设置密码的步骤,实际上就不需要注册页面了,统一使用 login 逻辑即可。 流程图 lararal 自带的授权逻辑 由于使用手机号加验证码的方式与 laravel php ...
2018-12-14 · 阅读 10354
例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 form 表单时,就不得不对提交的手机号及验证码做基本的数据校验。 手写规则,非常浪费时间。使用 laravel 内置的 validation 功能可以节省大量的代码及时间,而且可读性好一万倍。 新建一个 request php artisan make:request LoginPost 使用独立的 form request validation 的原因是,可以方便的自定义错误信息。 此时会新增一个 request 文件 app/Http/Requests/LoginPost.php 在其中设置校验规则,及定制化的错 ...
2018-11-21 · 阅读 8952
验证缓存文件是否会自动删除的目的是,防止产生大量的缓存文件,占满磁盘。因为,我最近越来越多的使用 cache 来缓存各类 token。 使用的是 file 作为 CACHE_DRIVER CACHE_DRIVER=file 首先生成一个 cache > php artisan tinker >>> cache(['name' => 'zhongwei'], 1); => null >>> echo cache('name'); zhongwei 此时检索 cache 文件存储的位置 > grep zhongwei -r ...
2018-11-19 · 阅读 6226
网站中,许多页面的侧边栏是相同的。例如: 分类列表页,与文章详情页的侧边栏都包含 最新文章 最新评论 统计计数 这些相同的侧边栏数据也是动态的,并不是固定的。 在每个 controller 里都写一遍数据读取逻辑,并赋值给模板,这样做有几个弊端 重复编码量不小。即使提取成函数,也要手动将变量传递给模板,controller 中无法专注于业务逻辑 不利于模块化 简单粗暴的做法 - 全局 view share 之前,我用了一种简单粗暴的解决方案: 在 app/Providers/AppServiceProvider.php 里全局共享模板变量,即,View::share。 但是,这种做法的 ...
2018-10-10 · 阅读 6989
在 Laravel model 中,设置了某个属性做 array casting. protected $casts = [ 'rounds' => 'array', ]; 但是在 controller 中执行 array_push($record->rounds, date("Y-m-d H:i:s")); 时,报错 production.ERROR: Indirect modification of overloaded property 可见,casting 并不支持一些针对特定类型的操作,例如无法作为指定类型的函数的参数。 按照官 ...
2018-10-09 · 阅读 9463
由于我不习惯于使用 laravel migration 来管理数据表变更,所以很多项目都是无法直接执行 php artisan migrate 否则会报错 SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists 即,这些本该由 migrate 生成的表,已经提前由 SQL 创建了。 所以,我非常需要能够指定运行部分 migration 的方法。例如创建 job queue 相关的两个表。 将需要执行的 migration 文件复制到 new 目录下,然后执行 php ar ...
2018-10-09 · 阅读 11878
job 是异步执行。适合耗时长的任务。例如,批量发送邮件,短信。 event 是在 request 的生命周期内执行。适合耗时短的操作。例如,更改数据字段状态。 但是, event 的好处是,可以复用各种监听。例如,事件 A1 可以触发 B1, B2; 事件 A2 可以触发 B1, B2, B3。 混合使用 例如,在 event 中添加 job 任务。 参考 https://sergeyzhuk.me/2016/02/23/laravel-jobs-vs-events/ ...
2020-04-27 · 阅读 28549 · 字数 190
记录一下 Laravel Storage 的常见用法 内容写入磁盘文件 > php artisan tinker >>> use Illuminate\Support\Facades\Storage; >>> Storage::put('test.txt', 'hello'); => true ls storage/app/ public/ test.txt 文件默认创建在 project/storage/app 目录下 获取文件存储的本地磁盘全路径 继续在 tinker 中测试一下 >>> storage_path() ...
2018-09-10 · 阅读 9025
之前尝试过对 Laravel 的 Controller 做 Feature Test,但是在业务变得越来越复杂之后,我感觉对 controller 里的函数也没了自信,急需对功能函数做 Unit Test,以平复我不安的情绪。 例如: 新建一个 Unit Test,由于默认新建的是 feature test, 所有后面需要加上 unit 参数 php artisan make:test StaffSalaryHistoryTest --unit 此时会看到 tests/Unit 目录下多了一个文件 Untracked files: (use "git add <file& ...
2019-05-07 · 阅读 14236 · 字数 379
共同之处,这三个函数的参数,都是 model 中的 relationship function 的名字。 1 对 N N 对 N with 类似于 SQL 中的 left join。左侧数据会全部显示。 with 是 eager loading,即预加载关系数据。 has 类似于 SQL 中的 inner join。 当右侧有数据时才会显示。 注意,has 跟 whereHas 并不返回关系数据。 whereHas inner join 之后,可以补充查询条件 whereHas 实际应用场景 例如,backpack 中的 N 对 N 关系的过滤,使用 whereHas $this-> ...
生活 | 跑步 清单 足球 鲁班 探索 孤独的美食家 驾驶 电视剧 收纳 奶爸 健康 game 电影 周末 joke |
---|---|
Geek | 健身 Laravel Git Vim MySQL Linux UI Windows SVN 纪录片 管理 Shell 游记 工具 手机 BackboneJS 自建博客 Mac DNS Tornado CDN Django Python AngularJS 理财 前端 Nginx 爬虫 Redis Javascript Browser 浏览器 推广 OAuth CSS PHP Social Networks 安全 运维 创业 杂记 VueJS Android Image IDE Java ReactJS 数据分析 SQLite RESTful 读书笔记 家电 ecshop Vagrant wordpress docker SEO GTD magento mongodb nodejs weex 冷知识 ruby iOS 微信小程序 AI CMS 快应用 backpack 广告联盟 OA 短信 UWP Win CSharp Tampermonkey graphviz 钉钉 WPS 数据字典 微信公众号 Fuchsia Adobe XD SQL Server thinkphp 代码规范 商业模式 Flutter 头痛的问题 serverless 视频制作 国际化 golang 服务器 Kotlin 网站建设 5G 笔记本 图片 spark spring 物联网 InfluxDB 图像识别 postgre rust |
成长的烦恼 | 闲言碎语 待产 不睡觉 写作 程序员 孙心然语录 原则 大鸿语录 |
地球 | 植物 时间 中文 赚钱 国家地理 烟台 一生伏首拜阳明 emoji 弟子规 英文 国际贸易 |