[英]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.