Laravel 多对多关系查询

Posted

技术标签:

【中文标题】Laravel 多对多关系查询【英文标题】:Laravel many-to-many relationship query 【发布时间】:2018-11-02 09:24:59 【问题描述】:

我正在构建一个 Laravel 应用程序,其中包含一个用户表和一个活动表,以及通过一个名为 assignments 的数据透视表实现的活动和用户之间的多对多关系:

用户:id,... 活动:id,... 分配:id、activity_id、user_id、...

我需要记录用户每次完成活动的时间。一个用户可以多次完成相同的活动。我正在尝试确定在数据库中对此进行建模的最佳方法。据我所知,选项是:

    一个表完成:id, assignment_id, ... 第二个数据透视表完成:id、activity_id、user_id、...

我可以创建迁移等。但是我正在努力处理模型类及其关系方法。特别是,对于上面的第一个选项,我将如何定义所需的模型类和关系方法?

【问题讨论】:

【参考方案1】:

嗯,除了活动跟踪之外,您几乎已经对所有内容进行了排序。所以,这就是我的建议:

用户表

包含 id、name、email 等列

活动表

包含 id、name 等列

user_activity 表(数据透视表)

包含 id、user_id、activity_id 等列 该表将包含用户和活动之间的多对多映射。

activity_tracking

包含 id、user_activity_id、status、updated_at 等列 在这里,您可以使用一个整数值作为 status 来表示完成,比如说 1。使用 updated_at 和 created_at 您可以跟踪活动的开始和完成时间。

【讨论】:

【参考方案2】:

创建activity_user 表并添加activity_iduser_id。为此不需要 id 列。然后将此代码添加到用户模型:

public function activity()

    return $this->belongsToMany('App\Activity', 'activity_user', 'user_id', 'activity_id');

如果我理解正确,就不需要别的了。

【讨论】:

以上是关于Laravel 多对多关系查询的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中搜索查询并计算结果的多对多关系

在 Laravel 4 中如何查询多对多关系?

Laravel 4:具有额外关系的多对多

Laravel 4.1 多对多关系和条件在哪里?

laravel查询多对多

刀片模板中的多对多关系中的 Laravel 嵌套查询