Laravel 5.5中数据透视表能否互关联?如何为plan_user关联分类?
嘿,我来帮你理清这两个Laravel 5.5的问题~
1. Laravel 5.5中数据透视表能否关联另一个数据透视表?
当然可以!不过这里有个小前提:默认的Laravel数据透视表(不带自增id的那种)没法直接加关联,因为它没有主键来作为关联的依据。但像你的plan_user表,它本身就有id主键,这种其实更像一个带有额外字段的中间模型,而不只是单纯的透视表。
你只需要给plan_user创建一个自定义的透视模型,让它继承Illuminate\Database\Eloquent\Relations\Pivot(Laravel 5.5里的对应类),之后就能在这个模型里正常定义和其他表(包括另一个透视表或者普通表)的关联了。
举个简单的模型示例:
namespace App; use Illuminate\Database\Eloquent\Relations\Pivot; class PlanUser extends Pivot { // 因为你的表名是plan_user,符合Laravel命名规范,所以不用额外指定表名 protected $table = 'plan_user'; }
2. plan_user_category表的结构设计
你的思路完全正确!plan_user_category表应该设计为plan_user_id和category_id这两个字段(如果需要的话也可以加自增id,但不是必须的)。
原因很简单:plan_user表已经有自己的主键id,用这个id来关联categories,就能精准地把分类绑定到特定的用户-计划关联记录上,完美匹配你的需求。
之后在PlanUser模型里,你可以这样定义和分类的多对多关联:
public function categories() { return $this->belongsToMany(Category::class, 'plan_user_category', 'plan_user_id', 'category_id'); }
这样你就能轻松通过$planUser->categories获取到该用户计划关联对应的所有分类啦~
内容的提问来源于stack exchange,提问作者Tiago Lopes
相关产品推荐
相关产品推荐

