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

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

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

例如:

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

你的解决方案是什么?

回答

最终我找到了解决方案。

动态关系。

Laravel - Eloquent - Dynamically defined relationship

【问题讨论】:

  • 最终我找到了解决办法。

标签: php laravel


【解决方案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 关系被删除而不编辑我的用户模型。
猜你喜欢
  • 2013-02-20
  • 1970-01-01
  • 2014-08-17
  • 2015-12-09
  • 2011-10-29
  • 2013-03-30
  • 2017-05-17
  • 2018-01-15
  • 2010-09-13
相关资源
最近更新 更多