【问题标题】:Laravel Link Two User AccountsLaravel 链接两个用户帐户
【发布时间】:2021-05-01 12:53:10
【问题描述】:

各位聪明人,

如果有人能帮帮我,我有点卡在迁移和逻辑问题上。

我想将一个用户 ID 链接到另一个用户 ID,例如我使用电子邮件注册,然后我想用不同的电子邮件将我的帐户链接到该原始帐户,我正在尝试做一些逻辑使其高效。

到目前为止我已经这样做了,但我不确定这是否正确

public function up()
{
    Schema::create('link_user', function (Blueprint $table) {
        $table->bigInteger('main_user_id')->unsigned()->index();
        $table->foreign('main_user_id')->references('id')->on('users')->onDelete('cascade');
        $table->bigInteger('linked_user_id')->unsigned()->index();
        $table->foreign('linked_user_id')->references('id')->on('users')->onDelete('cascade');
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('link_user');
}

我只是不确定要在用户模型中放入什么,因为这两个都将是 user_id,如果我的大脑被炸了,我可能做错了,并且不确定我是否做对了

我希望我最终能做这样的事情......

$newUser->user()->syncWithoutDetaching($request->user_id);

请提供任何帮助

解决了!!!

public function up()
{
    Schema::create('provider_user', function (Blueprint $table) {
        $table->bigInteger('provider_id')->unsigned()->index();
        $table->foreign('provider_id')->references('id')->on('providers');
        $table->bigInteger('user_id')->unsigned()->index();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->primary(['provider_id', 'user_id']);
    });
}

将此添加到用户模型中

public function linkedUser()
{
    return $this->belongsToMany(LinkAccount::class, 'link_account_user', 'linked_user_id', 'main_user_id');
}

添加了一个类

class LinkAccount extends Pivot

{ protected $table = "link_account_user";

protected $guarded = [];

}

终于做到了

$newUser->linkedUser()->syncWithoutDetaching($request->user_id);

希望这对其他人有所帮助,感谢@GlenUK 朝着正确的方向前进

【问题讨论】:

    标签: mysql laravel eloquent pivot-table relationship


    【解决方案1】:

    您在这里尝试建立多对多关系,尽管是在同一张表之间。

    https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

    您将需要一个包含两个字段的数据透视表(也称为中间表),每个字段都包含来自用户表的记录的 ID(很像您在上面定义的)。此外,如果您想保持简单,则不需要在迁移表上强制执行外键,您可以通过 belongsToMany() 方法在 User 模型上执行此操作。

    你需要传入外键,因为你在同一张表之间做多对多关系,Laravel 无法解决。

    然后,您将能够使用 Laravel 为此类关系定义的标准方法进行交互:

    https://laravel.com/docs/8.x/eloquent-relationships#updating-many-to-many-relationships

    【讨论】:

    • 非常感谢您的帮助,我已经用解决方案更新了主要内容,再次感谢您。
    • @BobHiller 欢迎您。如果这回答了您的问题,我将非常感谢将其标记为答案或赞成:)
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2023-02-15
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多