天涯海角异孤星
1、执行一个 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
2、如果遇到权限问题则赋予权限,例如
Permission denied
#执行如下命令
chmod +x XXXX.sh
3、如果遇到以下错误,修复它
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
#执行如下命令
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
4、最后提交(慎重)
git push origin --force --all
对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异,即 fastcgi.conf 只比 fastcgi_params 多了一行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
原本只有 fastcgi_params 文件,fastcgi.conf是 nginx 0.8.30 才引入的。主要为是解决以下问题:原本 Nginx 只有 fastcgi_params,后来发现很多人在定义 SCRIPT_FILENAME 时使用了硬编码的方式。
例如:
fastcgi_param SCRIPT_FILENAME /var/www/foo$fastcgi_script_name;
于是为了规范用法便引入了 fastcgi.conf。
今天下班前往微信的文件传输助手发了一条消息,是SQL语句,如下:
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(20) NOT NULL COMMENT '用户名',
`password` char(40) NOT NULL COMMENT '登录密码',
`api_token` varchar(128) NOT NULL DEFAULT '' COMMENT 'token',
`created_at` int(10) unsigned NOT NULL COMMENT '创建时间',
`updated_at` int(10) unsigned NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'
晚上回到家,本想复制这条消息记录在家里的电脑创建数据表,却莫名其妙报错了...
2023年1月19日补充:阿里云 composer 镜像自2022年下半年开始,更新就不太正常了,有些包拉取不到最新版,因此不再推荐!
详见链接:https://developer.aliyun.com/composer
PHP研发工程师技能图谱,可作为个人的学习过程梳理。
详见链接:https://www.processon.com/view/596700d6e4b043caf880b819
判断两个时间段是否重叠,如:
startdate1 — enddate1
startdate2 — enddate2
两个时间的重叠分4种情况,若你一一列出这四种情况来判断是否重叠那就弱爆了,最简单的方法:
startdate1 <= enddate2 and enddate1 >= startdate2
若你无法理解上面这种方法,那我还有下面的方法提供给你:
(startdate1 BETWEEN startdate2 AND enddate2)
or (enddate1 BETWEEN startdate2 AND enddate2)
or (startdate2 BETWEEN startdate1 AND enddate1)
or (enddate2 BETWEEN startdate1 AND enddate1)
在 Laravel 框架里,如果是 Eloquent 查询,可以用 toArray 方法的把结果转换为一维数组。
Eloquent 模型的 first 方法返回的是单个 Eloquent 对象,使用 toArray 方法可以把它转换成数组:
$user = User::where('id', 1)->first()->toArray();
Eloquent 模型的 get 方法返回的是包含多个 Eloquent 对象的 Collection 集合,使用 toArray 方法可以把集合转换成二维数组:
$users = User::whereIn('id', [1, 2, 3])->get()->toArray();
当我们使用 DB 类进行查询时,first 方法返回的是 stdClass 对象,get 方法返回的是包含多个 stdClass 对象的 Collection 集合。
// first 返回结果是 stdClass 对象
$user = DB::table('users')->where('id', 1)->frist();
// get 返回结果是包含多个 stdClass 对象的 Collection 集合
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
stdClass 是 PHP 的标准对象,当然不能使用 toArray 方法转换成数组。而 Collection 的 toArray 方法代码实现如下:
// 摘自框架文件:vendor\laravel\framework\src\Illuminate\Support\Collection.php
public function toArray()
{
return array_map(function ($value) {
return $value instanceof Arrayable ? $value->toArray() : $value;
}, $this->items);
}
它通过判断集合内元素是否实现了 Arrayable 接口,再调用元素自身的 toArray 方法转换成数组——刚好 Eloquent 实现了这个接口。而 stdClass 对象当然就没有这个方法,因此,DB 查询 get 方法返回的 Collection 集合,用 toArray 方法转换成数组时,仅能转换第一层,内部元素还是 stdClass 对象。
// first 结果转换成一维数组
$user = DB::table('users')->where('id', 1)->frist();
$user = (array)$user;
// get 结果转换成二维数组
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = $users->map(function ($value) { return (array)$value; })->toArray();
// first 结果转换成一维数组
$user = DB::table('users')->where('id', 1)->frist();
$user = json_decode(json_encode($user), true);
// get 结果转换为成二维数组
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = json_decode(json_encode($users), true);