繁体   English   中英

如何设置 Laravel hasOne 与自身的关系?

[英]How to setup laravel hasOne relationships with itself?

我正在 Laravel 中开发一个应用程序,用户可以在其中匹配一个用户。 我想弄清楚如何设置用户之间的 hasOne 关系。

到目前为止,这是我如何做到的。 用户在创建时有一个 match_id 代表他们匹配的用户。 当它们匹配时,此记录会更新。 这是我的表:

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('event_id');
        $table->foreign('event_id')->references('id')->on('events')->onDelete('cascade');
        $table->unsignedBigInteger('match_id')->nullable();
        $table->foreign('match_id')->references('id')->on('users')->onDelete('cascade');
        $table->string('name');
        $table->string('email');
        $table->timestamps();
    });

在用户模型中,我建立了这种关系:

 public function match() {
    return $this->hasOne(User::class);
}

但截至目前我不能做这样的事情并获得预期的匹配用户信息:

$user->match()->get();

阅读此处文档后,我发现在这种情况下您可以设置外键和本地键。 尽管如此,我很难弄清楚这一点。

有人可以就我如何做到这一点给我一些指导吗? 我也愿意接受关于不同实现的任何建议。

-----edit------ 在评论中和一些人讨论后,我在努力中取得了一些进展。 我能够得到一些结果,并通过记录比赛进行了试验。 无论出于何种原因,尽管我得到了错误的匹配。 请看下面的更多信息:

在我的控制器中,我记录用户名并在它形成后进行匹配:

Log::error($user->match);
Log::error('has matched with:');

Log::error($user);
Log::error('participant:');

在数据库中,这里是用户及其匹配项: 在此处输入图片说明

然而在日志中,匹配是不一样的: 在此处输入图片说明

由于match_id 在users 表上,关系应该是belongsTo,而不是hasOne。 在包含外键的模型上指定了belongsTo。

此外,您应该指定外键:

return $this->belongsTo('App\User', 'match_id');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM