为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕田峪9158850 2022-05-27 14:45:53
我正在开发 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();阅读此处的文档后,我发现在这种情况下,您可以设置外键和本地键。不过,我很难弄清楚这一点。有人可以给我一些关于如何做到这一点的指导吗?我也愿意接受有关不同实现的任何建议。------编辑------在与评论中的一些人讨论后,我的努力取得了一些进展。我能够得到一些结果,并通过记录匹配进行了实验。无论出于何种原因,尽管我得到了错误的匹配。请看下面的更多信息:在我的控制器中,我记录了用户名并在它形成后进行匹配:Log::error($user->match);Log::error('has matched with:');Log::error($user);Log::error('participant:');在数据库中,这里是用户及其匹配项:然而在日志中,匹配是不一样的: 
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

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

此外,您应该指定外键:

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


查看完整回答
反对 回复 2022-05-27
  • 1 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信