在 Laravel 中,我可以使用联结表创建 oneToMany 关系而不是 ownToMany 关系吗?
表格:
用户:id、姓名等
Table1:id、名称等
表2:id、名称等
表3:id、table1_id、table2_id、currentActive、lastActive
[带枢轴柱的连接表]
表4:id、table3_id、user_id、actionPending
[另一个联结表,其中包含第一个联结表 ID 和其他一些带有一些数据透视列的表 ID]
我可以创建这样的关系吗?
Table1 hasMany Table3而不是belongsToMany
表2 hasMany 表3 而不是belongsToMany
Table3 hasMany Table4而不是belongsToMany
表 4 属于表 3 和用户
用户有很多表4
没有必要在模型中标注这些关系。我们编写这些关系的原因是我们可以更轻松地构建查询。
例如:您有一个 User 模型,它与 Post 模型具有一对多关系,您可以像这样定义模型中的关系:
用户.php
public function posts(): HasMany
{
return $this->hasMany(Post::class)
}
Post.php
public function user(): BelongsTo
{
return $this->belongsTo(User::class)
}
然后在您的控制器中,您可以轻松获取属于用户的所有帖子,如下所示:
$user = Auth::user(); // retrieve the authenticated user
$posts = $user->posts(); // retrieve all the posts related to the user.
否则你就必须这样做:
$user = Auth::user(); // retrieve the authenticated user
$posts = Post::where('user_id', $user->id); // retrieving all the posts
这当然是一个简单的例子,但你已经可以看到 Laravel 的 Eloquent 关系的力量了。在这里您可以阅读有关定义关系和使用 Eloquent 关系进行查询的更多信息: https://laravel.com/docs/10.x/eloquent-relationships
总结一下:您不必在模型中定义关系。这种关系就是你有一个外键。 建议在模型中定义关系的原因是这样您可以利用 Laravel 的强大功能。
我希望你现在能更好地理解它。