在 laravel 中安装新软件包后,如何向模型添加新关系 [关闭]

Posted

技术标签:

【中文标题】在 laravel 中安装新软件包后,如何向模型添加新关系 [关闭]【英文标题】:How can i add new relationship to a model after install a new package in laravel [closed] 【发布时间】:2020-03-09 12:10:14 【问题描述】:

我正在使用 Laravel 包创建一个模块化系统。我有很多包,例如用户、个人资料、帖子等。

我想在应用程序或包中为我的模型添加新关系。

例如:

我有一个名为 User 的模型,我创建了一个名为 Profile 的新包。 我想在安装 Profile 包后,向 User 模型添加一个新关系。但我不想手动将 Profile trait 添加到我的用户模型中,因为我想创建一个模块化系统并且我不希望我的 User 包依赖于我的 Profile 包。

你的解决方案是什么?

回答

最终我找到了解决方案。

动态关系。

Laravel - Eloquent - Dynamically defined relationship

【问题讨论】:

最终我找到了解决办法。 【参考方案1】:

使用您的模型,您只需添加关系即可。在您的用户模型中的示例,您将添加一个新方法

public function profile()

  return $this->hasOne(Profile::class);

在您的个人资料模型中,您需要添加一个用户功能。

public function user()
  return $this->belongsTo(User::class)

但是您需要添加新的迁移,以便您有一个与您的用户相关联的个人资料,因此您可以执行以下操作:

php artisan make:migration add_profile_to_users_table --table=users

然后在新的迁移中,添加这个:

public function up()

    Schema::table('users', function($table) 
        $table->unsignedBigInteger('profile_id);
        $table->foreign('profile_id')->references('id')->on('profile');

    );

【讨论】:

在这个解决方案中,如果我删除了我的个人资料包,我的用户模型中有错误。我想从 Profile 包中注入与我的用户模型的配置文件关系。 您说的是配置文件包。那么,您使用的是什么包?如果您正在创建自己的配置文件模型等,那么上面的解决方案就是您需要做的。如果您使用的是 3rd-party 包,请告诉我您使用的是什么包。 我已经创建了自己的包。但在您的解决方案中。如果我删除配置文件包。我在用户模型中有错误。我不希望用户模型或用户包依赖于配置文件包。我想如果我删除配置文件包用户模型工作正确。 好的..我想我明白你的问题了。所以,有几种方法可以做到这一点......首先,通过新的迁移,您可以添加可为空的。 $table->unsignedBigInteger('profile_id)->nullable();这是最简单的方法,但 IMO,不是真正的干净。这样会更干净。因此,在您的新迁移中,您将拥有一个 down 函数.. public function down() Schema::table('users', function($table) Schema::dropColumn('profile_id'); 如果你使用这种方法,如果您删除您的配置文件包,那么您将需要为新迁移运行 down 方法。 好的。移民不是我的主要问题。实际上我的问题是课程。请注意我。如果我删除 Profile 包,那么我们有一个使用过的 Profile 类不存在。我想用 Profile 包服务提供商或类似的东西注入与 User 模型的一对多的配置文件关系。当我删除我的个人资料包时,HasOne 关系被删除而不编辑我的用户模型。

以上是关于在 laravel 中安装新软件包后,如何向模型添加新关系 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 eclipse RCP 中安装新插件/功能后,是不是有任何方法可以自动从磁盘中清除旧插件/功能?

如何在 pygments 中安装新的词法分析器?

在 Onedrive 文件夹中安装 laravel 时权限不足

在容器中安装新的程序

Docker容器中安装新的程序

如何使用prometheus监控docker