首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel中通过迁移将列添加到所有表中

在Laravel中通过迁移将列添加到所有表中
EN

Stack Overflow用户
提问于 2021-06-29 11:44:05
回答 2查看 459关注 0票数 0

随着项目规模的扩大,我们决定每个数据都应该属于创建这些数据的公司。因此,我将添加一个列"data_owner_company_id“,指向拥有给定记录的公司。是的,向每个模型添加这一列是可以生成迁移的,但是这并不是完全可行的,因为有120+表和模型。,我如何用最小的努力来解决这个问题呢?

对于模型部分,我想我可以很容易地通过继承将它应用到所有模型,但对于迁移并不确定。

如何通过迁移将int列添加到所有表中?

数据库: MySQL v8框架: Laravel 8,PHP7.3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-29 12:34:36

如果您在数据库中找到所有表的名称,这很简单,您必须循环并为每个表创建列。

尝试使用队列创建列,因为对120个表来说这将是一项繁重的工作。

检查以下代码:

代码语言:javascript
运行
复制
class CreateDataOwnerCompanyIdtoEachTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up ()
    {
        $columns = 'Tables_in_' . env('DB_DATABASE');//This is just to read the object by its key, DB_DATABASE is database name.
        $tables = DB::select('SHOW TABLES');

        foreach ( $tables as $table ) {
            //todo add it to laravel jobs, process it will queue as it will take time.
            Schema::table($table->$columns, function (Blueprint $table) {
                $table->unsignedInteger('data_owner_company_id');
            });
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down ()
    {
        $columns = 'Tables_in_' . env('DB_DATABASE');//This is just to read the object by its key, DB_DATABASE is database name.
        $tables = DB::select('SHOW TABLES');

        foreach ( $tables as $table ) {
            //todo add it to laravel jobs, process it will queue as it will take time.
            Schema::table($table->$columns, function (Blueprint $table) {
                $table->dropColumn('data_owner_company_id');
            });
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-06-29 12:16:40

我不能百分之百肯定它会起作用,但我现在说:

创建扩展Illuminate\Database\Schema\Blueprint;的类

在构造函数中调用父构造器,然后

代码语言:javascript
运行
复制
$this->unsignedBigInteger('data_owner_company_id')->nullable();

在迁移中使用新类而不是默认的Blueprint

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68178047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档