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

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

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

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

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

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

【问题讨论】:

    标签: laravel eloquent many-to-many


    【解决方案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');
      }
      

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

      【讨论】:

        猜你喜欢
        • 2015-05-29
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-01-04
        • 2019-02-07
        • 2017-11-03
        • 1970-01-01
        相关资源
        最近更新 更多