我正在开发 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');
- 1 回答
- 0 关注
- 167 浏览
添加回答
举报
0/150
提交
取消