Migration 为什么没有创建者编号、更新者编号等方法呢

我们在使用 Migration 创建表结构时,使用了 Illuminate\Database\Schema\Blueprint 类对表字段进行操作,这个类中包含了基本的数据类型和一些通用的方法,例如 $table->timestamps() 方法会创建 created_at 和 updated_at 两个字段,以及 $table->softDeletes() 方法会默认创建 deleted_at 字段。

目前在我开发的所有系统中,基本都使用上面的2个方法,同时每个表都会增加 3 个字段,分别是 created_user_id 、 updated_user_id 和 deleted_user_id,用于记录操作者编号。为什么作者不直接在Illuminate\Database\Schema\Blueprint 类中集成了呢?大家都不需要吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8
Epona

是不需要,本质上记录谁改的话,通过git就能查看了。

4年前 评论
24K大白羊 (楼主) 4年前
Epona (作者) 4年前
24K大白羊 (楼主) 4年前
  1. 这种字段跟用户表有关联,而不同项目的用户关联设计不一定都是一对多,可能是多态
  2. 不一定所有的项目都有需要用户这个概念,例如一个个人博客,可能只有管理员一个用户,那么就不需要这个字段
  3. 我项目里这个字段我是用created_by, updated_by 感觉比你这个简短一点,可以参考下哈 :kissing_heart:
4年前 评论
24K大白羊 (楼主) 4年前

亲,可以用 Macroable,给 Blueprint 加上一个相应的方法,来同时创建 这 6 个字段哦

4年前 评论
24K大白羊 (楼主) 4年前

直接写字段不好吗?还创建一个方法

4年前 评论
24K大白羊 (楼主) 4年前

我会更倾向于实现「操作日志」的功能来记录每个后台用户的操作,毕竟诸如updated_user_id这类,不但可能被后来者的操作覆盖,而且也看不出具体更新了什么

4年前 评论
24K大白羊 (楼主) 4年前

楼上 @largezhou 提出的解决方案的具体实现:https://wi1dcard.cn/posts/laravel-blueprin...

4年前 评论
24K大白羊 (楼主) 4年前

@Wi1dcard

Hi 认真看了下您博客的文章,感谢分享。
我本地的 Laravel 版本是5.8,使用方式和文章的略有不同。也许是版本不同导致的不兼容吧。

还是有更好的使用方法呢?还请多多指教。

public function register()
{
    Blueprint::macro('userBy', function(Blueprint $table) {
        $table->integer('created_by')->comment('创建者');
        $table->integer('updated_by')->nullable()->comment('更新者');
        $table->integer('deleted_by')->nullable()->comment('删除者');
    });
}
$table->userBy($table);
4年前 评论
Wi1dcard 4年前
Wi1dcard 4年前
24K大白羊 (作者) (楼主) 4年前

@24K大白羊

这样不就可以了吗,也不需要传 $table 实例进去,这个回调,会自动绑定 $thisBlueprint 实例

Blueprint::macro('theSixColumns', function () {
    $this->timestamps();
    $this->softDeletes();
    $this->integer('created_by');
    $this->integer('updated_by');
    $this->integer('deleted_by');
});

Schema::create('banners', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->theSixColumns();
});
4年前 评论
24K大白羊 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!