Laravel 模型(Model) 关联(eloquent-relationships) 查询未找到值返回默认值 作者: Chuwen 时间: 2023-05-29 分类: Laravel 评论 ## Laravel 模型关联查询未找到值返回默认值 在实际业务中,经常会用到模型关联查询,但是有时候关联的那个模型在数据库中不存在,则会返回 null,如果你再去判断是否为 null 逻辑就很复杂,下面给出一个现实中的常见一个例子 假设有 2 个模型,`User::class` 和 `UserConfig::class` **User::class** ```php hasOne(\App\Models\UserConfig::class, 'uid', 'id'); } } ``` **UserConfig::class** ```php $userM->config->locales ]; ``` ## 解决方法 [翻阅文档](https://laravel.com/docs/10.x/eloquent-relationships#default-models)发现有这样一个方法 `withDefault()` 官方文档的解释: > The belongsTo, hasOne, hasOneThrough, and morphOne relationships allow you to define a default model that will be returned if the given relationship is null. This pattern is often referred to as the Null Object pattern and can help remove conditional checks in your code. In the following example, the user relation will return an empty App\Models\User model if no user is attached to the Post model: > > 机器翻译成中文: > >> 如果给定的关系为空,则可以定义默认模型。这种模式通常称为 `空对象模式`,可以帮助删除代码中的条件检查。在以下示例中,如果没有用户附加到Post模型,用户关系将返回一个空的App\Models\User模型: 用法很简单,只需要在 `hasOne` 末尾加上 `->withDefault()` 方法,然后在 `UserConfig::class` 的 `$attributes` 属性写上默认值即可 **User::class** ```php hasOne(\App\Models\UserConfig::class, 'uid', 'id')->withDefault(); } } ``` **UserConfig::class** ```php ['en'] ]; } ``` ```php $uid = 1; $userM = User::findOrFail($uid); return [ // 如果关联的 config 模型查找不到值,就会返回默认值 ['en'] 'locales' => $userM->config->locales ]; ```
Laravel Model(模型)实现分表查询 - 根据 UID 一定数量分表查询 作者: Chuwen 时间: 2023-04-28 分类: Laravel,PHP 评论 当业务达到一定量,一些表就可能需要用到分表、分库等方法,加快数据库查询速度,在 Laravel 中可以按照如下方式实现 ### 代码实现如下 ```php table . "_" . (($tableNum - 1) * $count + 1) . "_" . ($tableNum * $count); } public function scopeByUid($query, int $uid) { return $query->from(self::getPartitionedTableName($uid))->where('uid', $uid); } } ``` ### 使用方法 ```php // 查找的表是 orders_1_10000 Orders::byUid(4)->first(); // 查找的表是 orders_10001_20000 Orders::byUid(20000)->first(); ```
使用 Lodash 过滤 Object 值为 undefind、null 作者: Chuwen 时间: 2023-03-31 分类: JavaScript 评论 ## 功能实现 我们使用 Lodash 的 [omitBy](https://www.lodashjs.com/docs/lodash.omitBy "omitBy") 方法即可实现 参数 1. `object` (Object): 来源对象。 2. `[predicate=_.identity]` (Function): 调用每一个属性的函数。(*也就是当满足这个条件将会被过滤掉*) ```ts const { omitBy } = require("lodash") const filterParams = { day: 1, min: undefined, max: null, age: "" } omitBy(filterParams, (value, key) => value === undefined || value === null) // 运行结果:{ day: 1, age: '' } ```
批量修改 git commit 的作者和邮箱信息 作者: Chuwen 时间: 2023-03-31 分类: Linux 评论 ## 脚本 通过此脚本即可实现一键修改 ```shell #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="填写原来的邮箱" CORRECT_NAME="填写现在的名称" CORRECT_EMAIL="填写现在的邮箱" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags ``` 运行后,然后执行 `git push -f` 即可
Nginx 判断 GET 参数是否为空,如果为空设置默认值 作者: Chuwen 时间: 2023-03-14 分类: Nginx 评论 ## 配置如下 ```nginx // 如果 GET 参数 shop 为空,则设置默认值为 default-shop.com map $arg_shop $get_shop { "" "default-shop.com"; default $arg_shop; } server { listen 80; server_name example.com; index index.html; root /www/wwwroot/example.com; location { // 使用变量 add_header X-Shop $get_shop; } } ```