在 Laravel 中我可以使用联结表创建 oneToMany 关系而不是 ownToMany 吗?

问题描述 投票:0回答:1

在 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

laravel database-design eloquent-relationship database-relations
1个回答
0
投票

没有必要在模型中标注这些关系。我们编写这些关系的原因是我们可以更轻松地构建查询。

例如:您有一个 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 的强大功能。

我希望你现在能更好地理解它。

© www.soinside.com 2019 - 2024. All rights reserved.