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_id
和user_id
。为此不需要 id 列。然后将此代码添加到用户模型:
public function activity()
return $this->belongsToMany('App\Activity', 'activity_user', 'user_id', 'activity_id');
如果我理解正确,就不需要别的了。
【讨论】:
以上是关于Laravel 多对多关系查询的主要内容,如果未能解决你的问题,请参考以下文章